使用Python从正在运行的脚本中读取标准输出

我在使用python时遇到了一些麻烦.我试图从正在运行的脚本中获取输出,并在另一个脚本中使用它.所以,我要做的就是这样.

假设像这样的out.py和in.py;

# out.py
def main():
    while True:
        print "test"
        time.sleep(10)
main()

# in.py
text = sys.stdin.readline()
print "hello " + text

我想运行这样的脚本,

$python out.py | python in.py

但是,它挂起并且什么也不打印,而是每10秒打印一次“ hello test”.由此,我猜测等待直到out.py终止.好吧,如果我想在守护进程中使用in.py怎么办?

我的实际问题是;我正在尝试从arpwatch获取输出.arpwatch作为守护程序运行,并将ip / mac配对发送到stderr.我想获得该输出并解析它;所以,我需要这样的东西;

$arpwatch | python myscript.py

为了达到这个目的,我应该如何编码myscript.py?我尝试使用subprocess module,,但没有再次成功.我希望我能清楚地解释我的问题,因为我的英语很好.

谢谢你的帮助.

解决方法:

问题是缓冲之一.如果您在out.py中显式刷新stdout,它将消失:

import sys
import time

def main():
    while True:
        print "test"
        sys.stdout.flush()
        time.sleep(10)
main()

不幸的是,您必须依靠arpwatch本身来完成此操作.如果不是,您将要尝试使用PTYs而不是管道,因为那些管道算作终端,并且会导致大多数应用程序使用行缓冲而不是块缓冲.

上一篇:管道流到Debug.Write()


下一篇:python ssh stdout多个