连接到远程服务器并使用 python 下载和提取二进制 tar 文件
connecting to a remote server and downloading and extracting binary tar file using python
我想连接到远程服务器,下载二进制 tar 文件并将其提取到该主机上的特定目录中。我正在使用 python 2.6.8
- 通过 ssh 连接到该服务器的简单方法是什么?
我在下载 tar 文件并解压缩的脚本中看到以下错误
回溯(最近调用最后):
文件“./wgetscript.py”,第 16 行,位于
tar = tarfile.open(file_tmp)
文件“/usr/lib64/python2.6/tarfile.py”,第 1653 行,打开
return func(名称, "r", fileobj, **kwargs)
文件“/usr/lib64/python2.6/tarfile.py”,第 1715 行,在 gzopen 中
fileobj = bltn_open(名称,模式 + "b")
类型错误:强制转换为 Unicode:需要字符串或缓冲区,找到元组
#!/usr/bin/env python
import os
import tarfile
import urllib
url = 'http://**************/Lintel/Mongodb/mongodb-linux-x86_64-enterprise-suse12-3.2.6.tgz'
fullfilename = os.path.join('/tmp/demo1','file.tgz')
file_tmp = urllib.urlretrieve(url,fullfilename)
print file_tmp
base_name = os.path.basename(url)
print base_name
file_name, file_extension = os.path.splitext(base_name)
print file_name, file_extension
tar = tarfile.open(file_tmp)
nameoffile = os.path.join('/tmp/demo1','file')
tar.extractall(file_name,nameoffile)
tar.close()
此处有 2 个错误:
urllib.urlretrieve
(或Python 3 中的urllib.requests.urlretrieve
)returns一个tuple
:文件名,httprequest。您必须将结果解压缩为 2 个值(或原始 fullfilename
)
- 下载没问题,但是
tarfile
模块并没有按照预期的方式工作:tar.extractall
有两个参数:.tar/.tgz 文件的路径和成员的可选 list
(在你的情况下你可以用 tar.getmembers()
获得)。对于此示例,我建议我们删除该过滤器并提取临时目录中的所有内容。
固定码:
url = 'http://**************/Lintel/Mongodb/mongodb-linux-x86_64-enterprise-suse12-3.2.6.tgz'
temp_dir = '/tmp/demo1'
fullfilename = os.path.join(temp_dir,'file.tgz')
# urllib.request in Python 3
file_tmp,http_message = urllib.urlretrieve(url,fullfilename)
base_name = os.path.basename(url)
file_name, file_extension = os.path.splitext(base_name)
tar = tarfile.open(file_tmp)
#print(tar.getmembers()[0:5]) # would print 5 first members of the archive
tar.extractall(os.path.join(temp_dir,file_name))
tar.close()
我想连接到远程服务器,下载二进制 tar 文件并将其提取到该主机上的特定目录中。我正在使用 python 2.6.8
- 通过 ssh 连接到该服务器的简单方法是什么?
我在下载 tar 文件并解压缩的脚本中看到以下错误
回溯(最近调用最后): 文件“./wgetscript.py”,第 16 行,位于 tar = tarfile.open(file_tmp) 文件“/usr/lib64/python2.6/tarfile.py”,第 1653 行,打开 return func(名称, "r", fileobj, **kwargs) 文件“/usr/lib64/python2.6/tarfile.py”,第 1715 行,在 gzopen 中 fileobj = bltn_open(名称,模式 + "b") 类型错误:强制转换为 Unicode:需要字符串或缓冲区,找到元组
#!/usr/bin/env python
import os
import tarfile
import urllib
url = 'http://**************/Lintel/Mongodb/mongodb-linux-x86_64-enterprise-suse12-3.2.6.tgz'
fullfilename = os.path.join('/tmp/demo1','file.tgz')
file_tmp = urllib.urlretrieve(url,fullfilename)
print file_tmp
base_name = os.path.basename(url)
print base_name
file_name, file_extension = os.path.splitext(base_name)
print file_name, file_extension
tar = tarfile.open(file_tmp)
nameoffile = os.path.join('/tmp/demo1','file')
tar.extractall(file_name,nameoffile)
tar.close()
此处有 2 个错误:
urllib.urlretrieve
(或Python 3 中的urllib.requests.urlretrieve
)returns一个tuple
:文件名,httprequest。您必须将结果解压缩为 2 个值(或原始fullfilename
)- 下载没问题,但是
tarfile
模块并没有按照预期的方式工作:tar.extractall
有两个参数:.tar/.tgz 文件的路径和成员的可选list
(在你的情况下你可以用tar.getmembers()
获得)。对于此示例,我建议我们删除该过滤器并提取临时目录中的所有内容。
固定码:
url = 'http://**************/Lintel/Mongodb/mongodb-linux-x86_64-enterprise-suse12-3.2.6.tgz'
temp_dir = '/tmp/demo1'
fullfilename = os.path.join(temp_dir,'file.tgz')
# urllib.request in Python 3
file_tmp,http_message = urllib.urlretrieve(url,fullfilename)
base_name = os.path.basename(url)
file_name, file_extension = os.path.splitext(base_name)
tar = tarfile.open(file_tmp)
#print(tar.getmembers()[0:5]) # would print 5 first members of the archive
tar.extractall(os.path.join(temp_dir,file_name))
tar.close()