簡體   English   中英

使用Python從正在運行的腳本中讀取stdout

[英]Reading stdout from a running script with Python

我在使用python時遇到了一些麻煩。 我試圖從正在運行的腳本獲取輸出並在另一個腳本中使用它。 所以,我想要做的就是這樣;

假設out.pyin.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM