我正在使用subprocess模塊與linux命令的輸出進行交互。下面是我的代碼。在執行第二子即Python中subprocess.PIPE的替換?
p = subprocess.Popen("grep \"controller\|worker\""+ file_name,stdout=subprocess.PIPE, shell=True)
import subprocess
import sys
file_name = 'myfile.txt'
p = subprocess.Popen("grep \"SYSTEM CONTROLLER\" "+ file_name, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
print output.strip()
p = subprocess.Popen("grep \"controller\|worker\" "+ file_name, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
lines = output.rstrip().split("\n")
print lines
我的程序掛起我知道了這一進程掛起的原因是緩衝重定向到subprocess.PIPE是越來越充滿,進一步寫哪些塊的過程。
我想知道是否有任何方式,以避免緩衝器滿載情況,使我的程序一直沒有任何掛起問題時執行?
我認爲(但不知道)的誤差是在使用雙引號到兩個子進程。使用double來分隔命令字符串和單個字符或反之。考慮使用'os.system()' –
fattidare
@fattidare錯誤未使用雙引號。這是因爲在許多其他文件中使用PIPE。 – pankmish
爲什麼你想要在子進程中執行'grep'?爲什麼不使用Python的're'模塊來執行您的正則表達式操作? –