如何在 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
如何在 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
它不挂。echo/shell 决定,因为它正在写入管道,它将以块缓冲而不是行缓冲模式执行 I/O。如果您等待足够长的时间,或者sleep 1从 shell 脚本中删除 ,您会看到来自的输出A确实通过了。
有两种可能的解决方案:
pexpect这样做,对您隐藏了大部分复杂性。不过,它不是 的替代品subprocess。检查此编码片段是否有效。
猫 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)