我可以使用创建一个 .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
我认为您可以在流模式下打开 tar 文件并将其传递给 sys.stdout:
import sys
with tarfile.open(fileobj=sys.stdout, mode='w|gz') as archive_fd:
add_files_to_tar('.', archive_fd)
tarfile 文档说这在完成时不会关闭标准输出。
在模式字符串中使用fileobj=sys.stdout
和管道符号(表示流模式)。
这类似于tar czf - .
:
with tarfile.open(archive, 'w|gz', fileobj=sys.stdout) as archive_fd:
archive_fd.add('.')
这是在 Linux 上测试的;我认为它会在 Windows 上失败。有关该问题的解决方案,请参阅此问题。
参考: