1

我可以使用创建一个 .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
4

2 回答 2

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 文档说这在完成时不会关闭标准输出。

于 2013-11-13T17:06:21.207 回答
1

在模式字符串中使用fileobj=sys.stdout和管道符号(表示流模式)。

这类似于tar czf - .

with tarfile.open(archive, 'w|gz', fileobj=sys.stdout) as archive_fd:
    archive_fd.add('.')

这是在 Linux 上测试的;我认为它会在 Windows 上失败。有关该问题的解决方案,请参阅此问题。

参考:

于 2013-11-13T17:04:47.493 回答