2

我正在尝试使用 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 输出有多行,但是使用上面的脚本,我只能得到与变量中的中间关键字 2 匹配的行out

这里可能是什么问题?

更新:平台:windows txt_file 相当大~8 MB

4

2 回答 2

0

我想这是"\""东西(顺便说一句,看起来会更好'"')。

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

于 2013-07-26T07:14:21.400 回答
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()
于 2013-07-26T08:12:02.953 回答