Python从子进程读取输出
我有一个程序,它打开一个子进程,并通过写入它的Python从子进程读取输出,python,subprocess,Python,Subprocess,我有一个程序,它打开一个子进程,并通过写入它的stdin和读取它的stdout与之通信 proc = subprocess.Popen(['foo'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) proc.stdin.write('stuff\n') p
stdin
和读取它的stdout
与之通信
proc = subprocess.Popen(['foo'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
proc.stdin.write('stuff\n')
proc.stdin.flush()
问题是,在读取时,如果调用proc.stdout.read()
,以及尝试使用以下命令逐行读取时,它总是会阻塞:
output = str()
while proc.stdout in select.select([proc.stdout], [], [])[0]:
output += proc.stdout.readline()
由于select.select
返回proc.stdout
,即使已经读取了所有输出,它仍然会阻塞。我能做什么
请注意,我没有使用
proc.communicate
,因为我想与流程多次通信您希望从stdout
读取什么类型的输出?固定数量的线路?固定的字节数?多行直到找到空行?其他的?换句话说:程序应该在什么时候停止从标准输出读取数据并开始做其他事情?。。。或者你想只阅读现在可用的内容吗?(为了实现所谓的“异步通信”),子进程向标准输出生成了多少数据?有一个和阻塞子进程。它不是固定的行数;我给进程写了一个命令,它会返回一些不同的行数。看起来很相似