我在使用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而不是管道,因为那些管道算作终端,并且会导致大多数应用程序使用行缓冲而不是块缓冲.
标签:stdin,stdout,python,pipe 来源: https://codeday.me/bug/20191101/1986222.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。