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

connecting to a remote server and downloading and extracting binary tar file using python

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

  1. 通过 ssh 连接到该服务器的简单方法是什么?
  2. 我在下载 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()