嗨,我是一名Python初學者,並且喜歡通過Python的子流程模塊執行shell命令。 但是對於Popen構造函數有一些疑問 關於:參數stdin和stdout無法理解Python中的stdin和stdout如何在Python中工作
考慮我正在執行腳本來ping一個網站。順其自然 「www.google.com」 通過shell命令
項目#1:
import sys
import subprocess
cmdping = "ping -c4 www.google.com"
p = subprocess.Popen(cmdping,shell=True,stdout=subprocess.PIPE,universal_newlines=True)
while True:
out= p.stdout.read(1)
if out == '' and p.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
- 究竟發生在標準輸出= subprocess.PIPE.If我是對的,stdout是標準輸出。 那麼,爲什麼我們使用了= p.stdout.read(1)
如果我的計劃是像
import sys
import subprocess
cmdping = "ping -c4 10.10.22.20"
p = subprocess.Popen(cmdping, shell=True,stdin=subprocess.PIPE,universal_newlines=True)
,輸出類似:
PING 10.10.22.20 (10.10.22.20) 56(84) bytes of data.
64 bytes from 10.10.22.20: icmp_seq=1 ttl=63 time=0.951 ms
UMR-AUTO [email protected] #64 bytes from 10.10.22.20: icmp_seq=2 ttl=63 time=0.612 ms
64 bytes from 10.10.22.20: icmp_seq=3 ttl=63 time=0.687 ms
64 bytes from 10.10.22.20: icmp_seq=4 ttl=63 time=0.638 ms
--- 10.10.22.20 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.612/0.722/0.951/0.134 ms
你能解釋我這個請嗎?
我無法理解過程如何發生並想要準確知道。
嗨,非常感謝回覆。但是這個「handle.communicate('導入這個')」是什麼意思。通常Popen.communicate用於與流程進行交流並獲取流程的輸出。但是這個「import this」看起來很奇怪,我們也得到了這個輸出 – user3275349
'import this'是我發送給這個進程的命令。 '.communicate()'是一個雙向通道。沒有任何參數'handle.communicate()'你會得到結果。 –
我想這從SYS進口* 進口子 手柄= subprocess.Popen([ '蟒'], 標準輸入= subprocess.PIPE, 標準錯誤= subprocess.PIPE, 標準輸出= subprocess.PIPE,殼=真) 結果,錯誤= handle.communicate() 打印(結果),但它顯示空輸出 – user3275349