首頁 > 後端開發 > Python教學 > 如何正確地將字串輸入傳遞給`subprocess.Popen`的標準輸入?

如何正確地將字串輸入傳遞給`subprocess.Popen`的標準輸入?

Mary-Kate Olsen
發布: 2024-12-19 06:04:51
原創
590 人瀏覽過

How to Correctly Pass String Input to `subprocess.Popen`'s stdin?

通過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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板