簡體   English   中英

python 3 Popen(半)交互式來回通信與進程Popen.communicate()vs Popen.stdin / Popen.stdout

[英]python 3 Popen (semi-)interactive back-and-forth communication with a process, Popen.communicate() vs Popen.stdin/Popen.stdout

所有我看到有使用Python 3的過程相互作用的例子subprocess.Popen使用Popen.communicate("input_text")正好一次調用之前Popen.communicate()抓取標准輸出和終止程序。 我想編寫一些程序,這些程序需要通過stdin進行人工干預,因此,由於提示是可預測的,因此我想使它們自動化。

例如,內部許可申請要求我們通過提示(而不是從命令行)傳遞與客戶的唯一ID(4位整數),用戶數等有關的應用信息。然后,必須進行30次(隨機數),每次針對一個不同的產品,用另一個整數標識。

如果僅我可以學習如何使用Popen來回執行腳本,那么編寫腳本就很容易。 應該使用Popen.communicate()還是使用Popen.stdoutPopen.stdin() ,兩者之間有什么區別?

Popen.communicate將阻塞直到子進程完成或失敗,然后才從stdoutstderr返回信息。 因此,這不是您所需要的。

stdinstdoutstderr本質上是屬於您可以讀取或寫入的進程的特殊文件,與任何其他文件一樣,但是如果您將信息通過管道傳遞到它們,它們可以在進程之間提供接口。

我最近不得不實現與您所描述的類似的東西,我能夠通過“客戶端”過程的stdout檢索信息的唯一方法是使用pty模塊。 我將為您鏈接兩個對我有幫助的答案,但是請注意,這些解決方案僅適用於Posix,並且使用shell=True存在安全風險。 https://stackoverflow.com/a/5413588/533362https://stackoverflow.com/a/13605804/3565382

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM