2017-04-09 42 views
0

我試圖使用運行函數使用外部程序運行的輸出。 這個節目經常拋出的數據行,我需要在我的腳本 使用我已經找到了庫,並利用其run()/check_output()

例子:
def usual_process(): # some code here for i in subprocess.check_output(['foo','$$']): some_function(i) 運行()on/into python3(lynux)函數的綁定/管道輸出

現在假設FOO已經在一個PATH變量中,並且它在半隨機週期中輸出一個字符串。
我希望程序自己做,並且每次foo發送新行到它的輸出時運行some_function(i)

其中有兩個問題。管道輸出到一個for循環,並運行此作爲背景子 謝謝


更新:我已成功使用This

with os.popen('foo') as foos_output: 
    for line in foos_output: 
     some_function(line) 

根據獲得foo的輸出到some_function thisos.popen將被棄用,但我還沒有弄清楚如何管道python內部進程 現在只需要弄清楚如何運行此功能在後臺

+0

你的意思是'linux'嗎?如果是這樣,哪個發行版? –

+0

雖然我正在編程和測試om我的Gentoo,
我試圖限制發行版特定的代碼爲最小值,如果可能的話,堅持Pyton3。最終的代碼將主要針對Raspbian,但在後一版本的android中。基於_foo_的輸出,意圖很重要的是更新變量,而程序做其他事情 – Tomas

回答

0

所以,我已經解決了它。 第一步是啓動外部腳本:
proc=Popen('./cisla.sh', stdout=PIPE, bufsize=1)

接下來,我已經開始行動,會讀它的功能,並通過其管道

def foo(proc, **args): 
     for i in proc.stdout: 
     '''Do all I want to do with each''' 

foo(proc).start()`

限制是: 如果你的願望牛逼抓腳本錯誤,你將不得不管它。
其次是它留下殭屍,如果你殺了parrent因此不要忘記殺信號處理中的孩子