2013-07-26 66 views
2

我想下面執行系統命令使用python:使用下面的Python代碼Python的不一致標準輸出subprocess.popen

cat txt_file | egrep "keyword1|keyword2|keyword3" 

p1 = subprocess.Popen (['cat', txt_file], stdout=subprocess.PIPE) 
p2 = subprocess.Popen (['egrep', "\"" + keyword_list + "\""], stdin=p1.stdout, stdout=subprocess.PIPE) 

#where keyword_list is : "keyword1|keyword2|keyword3" 

p1.stdout.close() #for p2 to exit if SIGPIPE from p1 
out = p2.communicate()[0] 

有多種線路的egrep的輸出,但是使用上面的腳本,我只能得到與變量out中的中間關鍵字2匹配的行。

這裏有什麼問題?

更新: 平臺:窗口 txt_file相當大〜8 MB

回答

0

我猜想這是一個"\""的東西(這看起來更好爲'"',BTW)。

要調用Popen()沒有shell=True,所以你只要你想他們應該給的參數。在正常的egrep上調用""被外殼剝離,這是您在這裏沒有的一個步驟。所以你不需要他們在這裏。

0

問題通過以下解決方法解決:

#Using file as stdin for p2 
txt_file = open ('txt_file_path') 
p2 = subprocess.Popen (['egrep', keyword_list, stdin=txt_file) 
out = p2.communicate()[0] 
txt_file.close() 
相關問題