我有一個linux應用程序,使用標準輸入從命令行以交互方式運行以接受命令。我寫了一個使用子進程的包裝器來訪問stdin,而應用程序卻是背景的。我現在可以使用p.stdin.write(命令)將命令發送給它,但我該如何去監視它的響應?如何監視python中的子進程與標準輸出?
回答
從p.stdout
中讀取以訪問該過程的輸出。
根據過程的作用,您可能必須小心確保您不會阻止p.stdout
,而p
反過來阻止其stdin
。如果你肯定知道它會在每次你寫它的時候輸出線,你可以簡單地替代在這樣的循環:
while still_going:
p.stdin.write('blah\n')
print p.stdout.readline()
然而,如果輸出是比較零星的,你可能想看看進入select
模塊以更靈活的方式在讀寫之間切換。
我有一些麻煩理解如何使用選擇。你知道任何與我的情況有關的例子嗎? – dpcd 2010-10-06 06:31:55
@dpcd有幾種不同的方法可以使用select,這取決於代碼的結構是如何構建的,哪種方式最好。這兩個主要模式是「阻塞,直到這些文件中的任何一個變得可寫爲止......然後告訴我哪些是」和「不要阻塞,只要告訴我數據是否可用。這樣我就不會意外地阻止我的進程通過在沒有數據準備的文件上調用read()「 – Rakis 2010-10-06 12:55:34
@dpcd哦,Python的'select()'是對標準POSIX'select()'的一個非常薄的包裝。所有基於C語言的例子,你會發現,當谷歌搜索選擇應用幾乎相同的Python到C(Python只是返回列表,而不是位圖)。那裏有很多示例和教程。 – Rakis 2010-10-06 12:57:09
- 1. 監視進程標準輸出不一定使用CR/LF
- 2. 如何讀取VB6中的子進程的標準輸出?
- 3. 的Linux 3.0:與管道標準輸入執行子進程/標準輸出
- 4. 是否有可能輸出到監視流而不是標準輸入,標準輸出和標準錯誤? (python)
- 5. 防止子進程的子進程寫入標準輸出
- 6. 如何重定向一個子進程的標準輸出?
- 7. 進程通信中的管道標準輸入/標準輸出。
- 8. 獲取派生進程的標準輸出/標準錯誤在子進程
- 9. Python子進程.Popen無法使用標準輸出
- 10. Python:從後臺子進程獲取標準輸出
- 11. Python子進程標準輸出不讀取
- 12. 在linux中監視nohup進程/將標準輸出重定向到文件?
- 13. 如何在不通信的情況下讀取python子進程標準輸出
- 14. 寫入到標準輸入並從標準輸出中讀取長時間運行的子進程中的python
- 15. python子流程輸出到標準輸出
- 16. Python運行守護進程子進程和讀取標準輸出
- 17. 將父進程的控制檯(標準輸出,標準錯誤等)輸出重定向到子進程(反向)
- 18. 如何永久地將子進程輸出打印到標準輸出。
- 19. 在Python中的流標準輸出/標準輸出
- 20. 獲取node.js中所有嵌套子進程的標準輸出
- 21. 處理溢出標準輸出的子進程
- 22. 使用Paramiko的標準輸出作爲標準輸入與子流程
- 23. 使用python中的子進程重定向標準輸出速度非常慢
- 24. 將文件用作標準輸入和標準輸出進行子流程
- 25. 在標準輸入,標準輸出和標準錯誤中的監視器字節C
- 26. 爲外部程序包產生的Python子進程捕獲標準輸出
- 27. C:如何重定向命名管道標準輸入/輸出子進程的
- 28. 如何從子進程讀取標準輸出,當後者不刷新其標準輸出?
- 29. Python - Supervisor如何登錄標準輸出 -
- 30. 通過標準輸入與標準輸出stdout和stdr在Python中的交互
看起來像一個相關的鏈接:http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python – pyfunc 2010-10-06 06:11:38