最近我一直在搞Popen
。我催生了輸出寫入TemporaryFile
背景的過程:回調函數處理輸出
f = tempfile.TemporaryFile()
p = subprocess.Popen(["gatttool"], stdin = subprocess.PIPE, stdout = f)
現在它在我通過stdin
發送命令到過程和讀了一下後臨時文件的方式。它是非阻塞的,所以我可以執行其他任務。
問題是,gatttool
有時會生成一些輸出自身(例如通知)。我正在尋找一種方法來讀取此輸出,而不會阻止TemporaryFile
。
我的問題:
1)它是安全的讀取從TemporaryFile
(50行輸出),並希望subprocess
優雅地等待我來讀取數據或將其終止?
2)是否有一種優雅的方式來創建一個回調函數,該函數將在TemporaryFile
上的每個事件上調用(而不是每秒運行一次並讀取數據的線程)?
看起來像一個很好的用例命名管道(而不是純文本文件)。 –
也許:https://docs.python.org/2.2/lib/os-fd-ops.html並使用簡單的pipe()? – Melon
個人而言,我喜歡在'sh'模塊的子流程中使用更高級別的包裝 - 這就是爲什麼我發佈評論而不是編寫proprer答案的原因。 –