tbo*_*der 21 python subprocess
我想开始一个需要几分钟才能完成的程序.在此期间,我想阅读程序的进度消息(打印在标准输出上).问题是我找不到在运行期间读出输出的方法.
我发现读取程序输出的唯一函数是Popen.communicate(),但是这个方法一直等到进程完成.因此,无法获得进度并以特殊格式化方式使用户可见.
是否有可能以另一种方式做到这一点?
当我subprocess.popen使用我的脚本运行该过程时,我在屏幕上看到程序的输出.有可能隐藏它吗?(Ubuntu 10.10,普通终端)
chm*_*lig 20
最简单的方法是使用关键字参数调用Popen stdout=subprocess.PIPE.
p = subprocess.Popen(["ls"], stdout=subprocess.PIPE)
while True:
line = p.stdout.readline()
if not line:
break
print line
Run Code Online (Sandbox Code Playgroud)
要查看此操作,以下是两个示例脚本.将它们放在同一目录中并运行python superprint.py
printandwait.py:
import time
import sys
print 10
sys.stdout.flush()
time.sleep(10)
print 20
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
superprint.py:
import subprocess
import sys
p = subprocess.Popen(["python printandwait.py"], shell=True, stdout=subprocess.PIPE)
while True:
print "Looping"
line = p.stdout.readline()
if not line:
break
print line.strip()
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9355 次 |
| 最近记录: |