當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python subprocess.Popen.communicate用法及代碼示例


用法:

Popen.communicate(input=None, timeout=None)

與進程交互:將數據發送到標準輸入。從 stdout 和 stderr 讀取數據,直到到達文件結尾。等待進程終止並設置returncode 屬性。可選的 input 參數應該是要發送到子進程的數據,或者 None ,如果不應該向子進程發送數據。如果流以文本模式打開,input 必須是字符串。否則,它必須是字節。

communicate() 返回一個元組 (stdout_data, stderr_data) 。如果流以文本模式打開,則數據將是字符串;否則,字節。

請注意,如果要將數據發送到進程的標準輸入,則需要使用 stdin=PIPE 創建 Popen 對象。同樣,要在結果元組中獲得除 None 以外的任何內容,您還需要提供 stdout=PIPE 和/或 stderr=PIPE

如果進程在 timeout 秒後沒有終止,則會引發 TimeoutExpired 異常。捕獲此異常並重試通信不會丟失任何輸出。

如果超時到期,子進程不會被殺死,因此為了正確清理well-behaved應用程序應該殺死子進程並完成通信:

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()

注意

讀取的數據是緩存在內存中的,所以如果數據量很大或者沒有限製,不要使用這種方法。

在 3.3 版中更改:timeout加入。

相關用法


注:本文由純淨天空篩選整理自python.org大神的英文原創作品 subprocess.Popen.communicate。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。