通過Stdin 將字符串輸入傳遞給Subprocess.Popen
問題:
傳遞字串使用cStringIO.StringIO 物件進入subprocess.Popen 的stdin參數會產生錯誤,因為物件缺少必要的 fileno 屬性。
解決方案:
要解決此問題,建議使用 Popen 中概述的更簡單的方法。溝通()文件。透過設定stdin=PIPE,您可以為stdin建立一個管道,並將字串輸入直接提供給communicate方法。
from subprocess import Popen, PIPE, STDOUT p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT) grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0] print(grep_stdout.decode()) # Output: # -> four # -> five # ->
附加說明:
對於Python 3.5(編碼為3.6),subprocess.run 允許您傳遞字串輸入並以單一字串形式檢索輸出,從而簡化了流程打電話。
from subprocess import run, PIPE p = run(['grep', 'f'], stdout=PIPE, input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii') print(p.returncode) # Output: # -> 0 print(p.stdout) # Output: # -> four # -> five # ->
以上是如何正確地將字串輸入傳遞給`subprocess.Popen`的標準輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!