我想从一个长期运行的进程中捕获stdout,subprocess.Popen(...)
因此我将其stdout=PIPE
用作arg.
但是,因为它是一个长时间运行的进程,我还想将输出发送到控制台(好像我没有管道它)给脚本用户一个它仍在工作的想法.
这是可能吗?
干杯.
缓存你的长时间运行的子进程可能会使你的控制台输出生涩和非常糟糕的用户体验.我建议你考虑使用pexpect(或者,在Windows上,wexpect)来打败这样的缓冲并从子进程获得平滑,规则的输出.例如(在任何unix-y系统上,安装pexpect之后):
>>> import pexpect
>>> child = pexpect.spawn('/bin/bash -c "echo ba; sleep 1; echo bu"', logfile=sys.stdout); x=child.expect(pexpect.EOF); child.close()
ba
bu
>>> child.before
'ba\r\nbu\r\n'
Run Code Online (Sandbox Code Playgroud)
ba和bu将具有适当的时间(它们之间大约一秒).请注意,输出不受正常的终端处理,因此回车留在那里 - .replace
如果你需要\n
作为行尾标记,你需要自己对字符串进行后处理(只是一个简单的! - )如果子进程将二进制数据写入其stdout,则缺少处理非常重要 - 这可确保所有数据保持完整! - ).
归档时间: |
|
查看次数: |
11121 次 |
最近记录: |