如何在python中生成或打开子进程并实时处理其输出? 子进程根据其他系统事件随机打印输出。
这个“示例”挂起:
$./print.sh | ./echo.py
挂起。
print.sh
#!/bin/bash
while [ 1 ]; do
echo 'A'
sleep 1
done
echo.py
#!/usr/bin/python
import sys
for line in sys.stdin:
print line
答案 0 :(得分:2)
它没有挂起。 echo
/ shell决定,因为它正在写入管道,它将以块缓冲而不是行缓冲模式执行I / O.如果等待时间过长,或从shell脚本中删除sleep 1
,您会看到来自A
的输出确实已通过。
有两种可能的解决方案:
pexpect
这样做,隐藏了你的大部分复杂性。不过,它不是subprocess
的替代品。答案 1 :(得分:0)
检查此编码代码段是否有效。
cat ech.sh
#!/bin/bash
while [ 1 ]; do
echo -n 'A'
sleep 1
done
cat in_read.py
#!/usr/bin/python
import sys
import os
while True:
print os.read(0,1)