2010-10-06 92 views
0

我有一個linux應用程序,使用標準輸入從命令行以交互方式運行以接受命令。我寫了一個使用子進程的包裝器來訪問stdin,而應用程序卻是背景的。我現在可以使用p.stdin.write(命令)將命令發送給它,但我該如何去監視它的響應?如何監視python中的子進程與標準輸出?

+1

看起來像一個相關的鏈接:http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python – pyfunc 2010-10-06 06:11:38

回答

1

p.stdout中讀取以訪問該過程的輸出。

根據過程的作用,您可能必須小心確保您不會阻止p.stdout,而p反過來阻止其stdin。如果你肯定知道它會在每次你寫它的時候輸出線,你可以簡單地替代在這樣的循環:

while still_going: 
    p.stdin.write('blah\n') 
    print p.stdout.readline() 

然而,如果輸出是比較零星的,你可能想看看進入select模塊以更靈活的方式在讀寫之間切換。

+0

我有一些麻煩理解如何使用選擇。你知道任何與我的情況有關的例子嗎? – dpcd 2010-10-06 06:31:55

+0

@dpcd有幾種不同的方法可以使用select,這取決於代碼的結構是如何構建的,哪種方式最好。這兩個主要模式是「阻塞,直到這些文件中的任何一個變得可寫爲止......然後告訴我哪些是」和「不要阻塞,只要告訴我數據是否可用。這樣我就不會意外地阻止我的進程通過在沒有數據準備的文件上調用read()「 – Rakis 2010-10-06 12:55:34

+0

@dpcd哦,Python的'select()'是對標準POSIX'select()'的一個非常薄的包裝。所有基於C語言的例子,你會發現,當谷歌搜索選擇應用幾乎相同的Python到C(Python只是返回列表,而不是位圖)。那裏有很多示例和教程。 – Rakis 2010-10-06 12:57:09

相關問題