[英]Running python script from perl, with argument to stdin and saving stdout output
[英]Reading stdout from a running script with 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秒打印一次“你好測試”。 由此,我猜測|
等到out.py
終止。 那么,如果我想將in.py與守護進程一起使用,該怎么辦?
我的實際問題是; 我正試圖從arpwatch獲得輸出。 arpwatch作為守護進程運行,並將ip / mac配對發送到stderr。 我想得到那個輸出並解析它; 所以,我需要這樣的東西;
$ arpwatch | python myscript.py
為了實現這一點,我應該如何編碼myscript.py
? 我曾嘗試使用子進程模塊,但我沒有再次成功。 我希望我能清楚地解釋我的問題,因為我的英語很不錯。
謝謝你的幫助。
問題是緩沖。 如果你在out.py
明確刷新stdout,它就會消失:
import sys
import time
def main():
while True:
print "test"
sys.stdout.flush()
time.sleep(10)
main()
不幸的是,你必須依靠arpwatch
來做這件事; 如果沒有,你會想嘗試PTY而不是管道,因為那些算作終端並且會導致大多數應用程序使用行緩沖而不是塊緩沖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.