让我们考虑以下代码构造:
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, ''):
print(line)
这个for
循环是一个繁忙的循环,还是会等待来自进程的输出数据?我怎么检查这个?无论答案是什么,它是CPython语言规范或实现细节的一部分吗?
我对Python 2.x和Python 3.x感兴趣,主要操作系统(Windows,macOS,Linux)及其各自的内核。
答案 0 :(得分:2)
由于readline
阻塞,所以循环只有可用于读取的输出一样繁忙。
从命令行测试:
#!/usr/bin/env python
import subprocess
args = ('cat', '-')
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, ''):
print(line.rstrip('\n'))
$ ./x.py
a
a
b
b
<Ctrl-D>