我有一个程序,需要几个小时来完成,必须整合到一个现有的程序。我有一个脚本,它通过子进程模块运行程序,这很好地工作。但无法判断该计划有多大进展。这个程序确实向stdout输出一些实时信息,所以我想我可以从管道中读取一些信息。在
但是我不能正确地工作。我的脚本似乎阻碍了实时从管道中读取数据。在
我制作了一个简单的脚本来演示:import subprocess
worklist = [
{
'name' : '1: ',
'cmd' :r'/python27/python.exe printer.py',
'pid' :None
},{
'name' : '2: ',
'cmd' :r'/python27/python.exe printer.py',
'pid' :None
},{
'name' : '3: ',
'cmd' :r'/python27/python.exe printer.py',
'pid' :None
}
]
for work in worklist:
work['pid'] = subprocess.Popen(work['cmd'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,bufsize=0)
while True:
for work in worklist:
for line in work['pid'].stdout:
print work['name'] + str(line)
if all(item['pid'].poll() is not None for item in worklist):
break
for work in worklist:
work['pid'].communicate
在打印机.py包含:
^{pr2}$
所以我希望看到的是,它打印每个打印机.py“我实时打电话过来。不过,这一切都在同一时间完成了。在
有没有办法只使用子进程模块或其他python内置程序来解决这个问题?在
我在一台windows机器上,所以我不能使用pexpect,另外,由于这将不得不在很多系统上使用,我不想引入依赖项。。。或者至少尽可能少