我正在使用 Python 的
subprocess
模块启动一个新进程。我想实时捕获新进程的输出,以便对其进行处理(显示、解析等)。我已经看到了许多可以做到这一点的示例,有些使用自定义文件对象,有些使用线程,还有一些尝试读取输出,直到进程完成。
文件对象示例(点击此处)
- 我宁愿不使用自定义文件对象,因为我希望允许用户为
stdin
、stdout
和stderr
提供他们自己的值。
stdout
和 stderr
值。
读取输出示例(见下文)
在我看来最有意义的示例是读取 stdout
、stderr
直到进程完成。以下是一些示例代码:import subprocess
# Start a process which prints the options to the python program.
process = subprocess.Popen(
["python", "-h"],
bufsize=1,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
# While the process is running, display the output to the user.
while True:
# Read standard output data.
for stdout_line in iter(process.stdout.readline, ""):
# Display standard output data.
sys.stdout.write(stdout_line)
# Read standard error data.
for stderr_line in iter(process.stderr.readline, ""):
# Display standard error data.
sys.stderr.write(stderr_line)
# If the process is complete - exit loop.
if process.poll() != None:
break
我的问题是,
Q. 有没有推荐的方法使用Python捕获进程的输出?