我在使用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而不是管道,因为那些管道算作终端,并且会导致大多数应用程序使用行缓冲而不是块缓冲.