我可以使用
创建.tar.gz文件with tarfile.open(archive, 'w:gz') as archive_fd:
add_files_to_tar('.', archive_fd)
这很好用。但有时我想将这些文件打印到stdout
(如果我通过SSH执行命令)
有谁知道如何做到这一点?我的旧bash代码是这样的
tar -czf - $files >&1
或
tar -czf - $files >/filename
答案 0 :(得分:2)
我认为你可以在流模式下打开tar文件并传递给它sys.stdout:
import sys
with tarfile.open(fileobj=sys.stdout, mode='w|gz') as archive_fd:
add_files_to_tar('.', archive_fd)
tarfile文档说它在完成时不会关闭stdout。
答案 1 :(得分:1)
在模式字符串中使用fileobj=sys.stdout
和管道符号(表示流模式)。
这类似于tar czf - .
:
with tarfile.open(archive, 'w|gz', fileobj=sys.stdout) as archive_fd:
archive_fd.add('.')
这是在Linux上测试的;我认为它会在Windows上失败。有关该问题的解决方案,请参阅this question。
参考文献: