提问人:Matt 提问时间:8/28/2023 最后编辑:Matt 更新时间:9/11/2023 访问量:86
restic如何将数据输出到屏幕,而不是stdout或stderr?
How is restic outputting data to the screen but not to stdout or stderr?
问:
更新行
我有一个关于某个命令的输出去哪里的问题。我使用这种行为的命令作为示例。这是我感兴趣的命令的最后一行,因为它会在还原过程工作时更新。restic
对于上下文,restic 是一个备份实用程序;以下命令正在将 从备份中存储的内容还原到我的本地计算机。my-repo
example.com
$ 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
最后一行会随着时间的推移而更新,直到达到 100%,例如
[12:31] 1.22% 2989 files 2.087 GiB, total 39644 files 171.389 GiB
从 python 执行
我想从 Python 脚本(使用 )运行 restore 命令,并希望脚本打印出更新行,但无法正常工作。subprocess.Popen
我怀疑可能是更新行被输出到 stderr 而不是 stdout。因此,我重复了还原命令并将 stdout 和 stderr 重定向到文件,如下所示:
restic restore lat...rbose > out.log 2> err.log
err.log
保持为空,仅包含该行,不包含其他任何内容。out.log
restoring <Snapshot dff2f51a> to /Users/matt
Python 代码段
这是我调用 Popen 的代码片段:
backup_command = [
# fmt: off
"restic",
"--repo", repo_name,
"backup",
"--verbose",
"--exclude", "node_modules",
"--exclude", "whatever",
# fmt: on
]
backup_process = subprocess.Popen(backup_command, env=env_vars)
backup_process.wait()
关于下面 jurez 的回答,我没有通过或,但在查看了 Popen 的来源后,根据 jurez 的建议,它们默认为 。stdin
stderr
None
问题
我有几个问题。
- 为什么我的两个输出文件中都没有该行?
repository ae412afe opened (version 1)
- 这条线要去哪里?我该如何展示它?
[0:11] 0.02% 192 fil...
答:
从 Popen 文档:
stdin、stdout 和 stderr 分别指定已执行程序的标准输入、标准输出和标准错误文件句柄。有效值为 PIPE、DEVNULL、现有文件描述符(正整数)、具有有效文件描述符的现有文件对象和 None。PIPE 指示应创建子管道的新管道。DEVNULL 表示将使用特殊文件 os.devnull。使用默认设置为“无”时,不会发生重定向;子级的文件句柄将从父级继承。此外,stderr 可以是 STDOUT,这表示应将应用程序中的 stderr 数据捕获到与 stdout 相同的文件句柄中。
这意味着,如果您在构造函数中使用 and,子进程将从 Python 继承 and 文件描述符。换句话说,程序将发送到这些流的任何输出都将显示为 Python 自己的标准输出/标准错误。stdin=None
stderr=None
Popen
STDIN
STDERR
评论
stidin=None
stderr=None
来自 restic 文档:
从非交互式控制台运行时,默认情况下会禁用进度报告,以便不填充日志。对于交互式和非交互式控制台,环境变量可用于控制进度报告的频率。例如,使用 0.016666 每分钟仅更新一次进度。
RESTIC_PROGRESS_FPS
我使用 创建了一个非交互式 shell,导致没有进度报告输出。设置该值的工作方式与播发的方式相同。我发现更容易将“每次更新之间的秒数”视为“每秒帧数”,因此用于设置 FPS。Popen
1 / INTERVAL_IN_SECONDS
感谢 jasonharper 查找文档,谢谢!
评论
restic
RESTIC_PROGRESS_FPS