尝试使用Python子进程grep,包括引用无法找到结果

时间:2012-03-12 10:58:15

标签: python grep popen subprocess

我有一个文件/tmp/test.txt

this is test
that is test

当我跑步时

[test@localhost]# grep "this is" /tmp/test.txt 
this is test

我得到了输出。

当我尝试使用subprocess运行相同的命令时,我没有得到输出。它还返回代码1

import subprocess
p = subprocess.Popen(['grep', '"this is"', '/tmp/test.txt'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

print p.communicate ()
('', '')

# Command exit code.
print p.poll()
1

我还检查了Python Subprocess Grep中的答案并尝试了shell=True,但它无效。

我缺少在子进程中放置一些东西来获取输出,但我不知道:(。

2 个答案:

答案 0 :(得分:3)

您正在搜索文字模式"this is",包括引号。将命令列表中的第二个元素更改为'this is'而不是'"this is"'

仅在shell=True时才需要引用参数,在这种情况下,shell会解释它们并仍然将this is(不带引号)传递给grep

答案 1 :(得分:3)

使用shell=True,您需要将整个命令作为一个字符串提供:

>>> print subprocess.check_output(["grep 'this is' /tmp/test.txt"], shell=True)
>>> this is test
>>> p = subprocess.Popen(["grep 'this is' /tmp/test.txt"], shell=True)
>>> this is test

在前面提到的Q中也提到过。