2 回答

TA貢獻1946條經驗 獲得超4個贊
您的 shell 命令正在調用兩個命令, 的輸出ifconfig用作sed. 您可以使用 subprocess 來模擬它,但sed調用只是進行一些文本操作,因此更簡潔的方法是在該步驟中使用 Python。例如:
import re
import subprocess
pattern = r'inet (?:addr:)?(?!127\.0\.0\.1)((?:\d+\.){3}\d+)'
p = subprocess.Popen(['ifconfig'], stdout=subprocess.PIPE)
text = re.search(pattern, p.stdout.read()).group(1)
retcode = p.wait()

TA貢獻1829條經驗 獲得超7個贊
ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
您正在嘗試調用 2 個 shell 命令,ifconfig并且sed,沒關系。但是,這些是 shell 命令,在調用subprocess.Poen.
使用communictae方法,最好用在這里。并將命令作為字符串而不是列表發送。
import subprocess
command = ' '.join(['ifconfig', '|', 'sed', '-En', 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'])
p = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
stdoutdata, stderrdata = p.communicate() #this is blocking
for line in stdoutdata:
#do some thing with line
Popen.communicate(input=None)
與進程交互:將數據發送到標準輸入。從 stdout 和 stderr 讀取數據,直到到達文件末尾。等待進程終止??蛇x的輸入參數應該是一個要發送給子進程的字符串,如果沒有數據應該發送給子進程,則為 None。
添加回答
舉報