连接到远程服务器并使用python下载和提取二进制tar文件

时间:2016-10-12 22:14:02

标签: python remote-server

我想连接到远程服务器,将二进制tar文件下载并解压缩到该主机上的特定目录中。我使用的是python 2.6.8

  1. 什么是ssh到该服务器的简单方法?
  2. 我在脚本上看到以下错误,下载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:需要字符串或缓冲区,找到元组

  3. 
    
    #!/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()
    
    
    

1 个答案:

答案 0 :(得分:0)

这里有2个错误:

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

固定代码:

tar.getmembers()