用python如何实现远程服务器tar.gz压缩包内文件的读取?

单位有N台linux工控机,系统为linux,开通了ssh,工控机中产生的日志是用tar进行打包的,目前想读取tar打包中的对应文件,我看了python的第三方库,paramiko这个库能否实现远程的SSH连接、文件上传、下载、外部命令的执行,但是好像还是无法实现远程tar包文件的读取。想实现tar包内文件读取的库基本上只能实现本地读取,无法实现远程读取。
有人建议我先远程下载以后本地读取tar包内文件,但是我觉得这样的话网络带宽占用比较大,而且效率不高。
大家有没有什么好的解决办法呢?

阅读 7.1k
7 个回答

我觉得没有办法。
软件运行于本地,文件在远端。有些文件还能只先读一部分把目录给弄过来 提高效率。这点办不到的话,文件总归要传输到本地处理的,只不过是走什么协议来传输而已。再好一点儿,就是边传输边解压。
另外,你要是只读取远程压缩包里一小部分,就算实现了还说的过去,如果你还是要读取大部分内容。那你让它在远端解压再传过来,岂不更浪费带宽?
所以别想了,老老实实选择一个快速但占资源的 或者 限速不太占资源但慢了一些的方案。

可以开一个API。 读取tar的结构信息后返回。这样不会解压的。

考虑下sshfs?

你既然已经能ssh过去执行了...是不是可以只解压一个文件然后拖回来

在 Linux 主机上,你可以使用以下命令查看 tar 包内的内容。

1. file.tar.gz
gzip -dc file.tar.gz | tar tvf -

2. file.tar.bz2
bzip2 -dc file.tar.bz2 |tar tvf -

3. file.tar
tar tvf file.tar

而上面的这些命令,你可以使用 Python 的 os.system(cmd) 来执行并获得输出内容。

那么基于以上的事实,我建议你可以使用 flask 架构,做一个 web 页面来展示你所需要的内容
基于 flask 架构,你也可以做成 restful 形式的 api。

可不可以每个服务器都部署一个脚本,用于计算日志,然后通过API汇报给中央?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏