【发布时间】:2017-03-07 18:19:30
【问题描述】:
在使用 Python 执行 shell cmd 时,我尝试做两件事:
- 捕获标准输出并在发生时打印它
- 将stdout作为一个整体捕获并在cmd完成时对其进行处理
我查看了subprocess.check_output,但它没有允许我在输出发生时打印输出的标准输出参数。
所以在阅读this question 之后,我意识到我可能需要尝试不同的方法。
from subprocess import Popen, PIPE
process = Popen(task_cmd, stdout = PIPE)
stdout, stderr = process.communicate()
print(stdout, stderr)
这种方法的问题在于,根据文档,Popen.communicate():
从 stdout 和 stderr 读取数据,直到到达文件结尾。 等待进程终止
我似乎仍然无法将输出重定向到标准输出和命令完成时可以解析的某种缓冲区。
理想情况下,我想要这样的东西:
# captures the process output and dumps it to stdout in realtime
stdout_capture = Something(prints_to_stdout = True)
process = Popen(task_cmd, stdout = stdout_capture)
# prints the entire output of the executed process
print(stdout_capture.complete_capture)
有没有推荐的方法来完成这个?
【问题讨论】:
-
其他主题似乎集中在简单地捕获输出;然而,我试图将输出转储到标准输出并完整捕获它以在完成时进行解析。我被困在同时做这两件事。
标签: python