Python subprocess.popen上的stdout不一致

时间:2013-07-26 07:01:19

标签: python subprocess

我正在尝试使用python执行以下系统命令:

cat txt_file | egrep "keyword1|keyword2|keyword3"

使用下面的python代码:

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

2 个答案:

答案 0 :(得分:0)

我认为这是"\""的东西(看起来好像'"',BTW)。

您在没有 Popen()的情况下致电shell=True ,因此您应该根据需要提供参数。在正常的egrep调用中,""被shell剥离,这是您没有的步骤。所以你在这里不需要它们。

答案 1 :(得分: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()