[英]Python read stdin from piped process and from Popen subprocess simultaneously
[英]stdin read python from piped looping process
如何在python中生成或打开子进程并实时处理其输出? 子进程根据其他系统事件随机打印输出。
这个“例子”挂起:
$./print.sh | ./echo.py
$./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
它没有挂起。 echo
/ shell决定,因为它写入管道,它将以块缓冲而不是行缓冲模式执行I / O. 如果你等待足够长的时间,或者从shell脚本中删除sleep 1
,你会看到A
的输出确实通过了。
有两种可能的解决方案:
pexpect
做到了这一点,隐藏了你的大部分复杂性。 不过,它不是替代subprocess
替代品。 检查此编码代码段是否有效。
猫ech.sh
#!/bin/bash
while [ 1 ]; do
echo -n 'A'
sleep 1
done
猫in_read.py
#!/usr/bin/python
import sys
import os
while True:
print os.read(0,1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.