我想连接到远程服务器,将二进制tar文件下载并解压缩到该主机上的特定目录中。我使用的是python 2.6.8
我在脚本上看到以下错误,下载tar文件并将其解压缩
追踪(最近一次通话): 文件" ./ wgetscript.py",第16行,in tar = tarfile.open(file_tmp) 文件" /usr/lib64/python2.6/tarfile.py" ;,第1653行,处于打开状态 return func(name," r",fileobj,** kwargs) 文件" /usr/lib64/python2.6/tarfile.py" ;,第1715行,在gzopen中 fileobj = bltn_open(名称,模式+" b") TypeError:强制转换为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()

答案 0 :(得分:0)
这里有2个错误:
urllib.urlretrieve
(或Python 3中的urllib.requests.urlretrieve
)返回tuple
:filename,httprequest。您必须将结果解压缩为2个值(或原始fullfilename
)tarfile
模块没有工作方式认为它有效:tar.extractall
有两个参数:.tar / .tgz文件的路径和可选{{1}成员(您可以在案例中使用list
获得)。对于这个例子,我建议我们删除该过滤器并提取临时目录中的所有内容。固定代码:
tar.getmembers()