我有一个关于某个命令的输出去向的问题。我使用
restic
作为具有这种行为方式的命令的示例。这是我感兴趣的命令的最后一行,因为它会在恢复过程运行时更新。
就上下文而言,restic 是一个备份实用程序;下面的命令是将
my-repo
上存储的备份中的内容恢复到我的本地计算机。example.com
最后一行会随着时间更新,直到达到 100%,例如
$ restic restore latest --repo sftp:[email protected]:my-repo --target . --verbose
repository ae412afe opened (version 1)
restoring <Snapshot dff2f51a> to /Users/matt
[0:11] 0.02% 192 files 37.687 MiB, total 39644 files 171.389 GiB
[12:31] 1.22% 2989 files 2.087 GiB, total 39644 files 171.389 GiB
)并希望脚本打印出更新行,但无法使其正常工作。
我怀疑更新行可能被输出到 stderr 而不是 stdout。所以我重复了恢复命令并将stdout和stderr重定向到文件,如下所示:subprocess.Popen
restic restore lat...rbose > out.log 2> err.log
保持为空,并且
err.log
仅包含 out.log
行,没有其他内容。
我有几个问题。为什么我的两个输出文件中都没有
restoring <Snapshot dff2f51a> to /Users/matt
repository ae412afe opened (version 1)
这意味着,如果您在
[0:11] 0.02% 192 fil...
构造函数中使用
stdin=None
和 stderr=None
,子进程将从 Python 继承 Popen
和 STDIN
文件描述符。换句话说,程序发送到这些流的任何输出都将显示为 Python 自己的标准输出/标准错误。