【发布时间】:2012-01-12 22:40:48
【问题描述】:
我最近询问如何让 python shell 获得子进程输出。并得到了非常有用的回应 - 即为 POpen 提供一个 stdout=subprocess.PIPE
然后使用 p.stdout.readline() 并将结果提供给 print()
p = subprocess.Popen(args, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, cwd=StartPath, shell=False)
it = iter(p.stdout.readline, b'')
sRet = "## decode Error ##"
for line in it:
try:
sRet = line.rstrip().decode('utf-8')
except:
pass
print(sRet[:PYTHON_WINDOW_WIDTH])
viRet = p.wait()
但是,当我从多个线程同时调用此 POpen 时,我担心会发生什么。
相同的 subprocess.PIPE 被馈送到每个 POpen。延伸到每个 readline 都从两个子流程中获取结果。
除了得到一些古怪的结果之外,每个循环(其中的一行:)
似乎要等到两个线程子进程都完成后再继续
这不是我想要的。
- 那么有没有一种方法可以让我的一个 PIPE(每个线程一个),以便我可以依赖每个线程完全独立?
提前致谢
【问题讨论】:
标签: python-3.x pipe python-multithreading