我有一个文件/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
,但它无效。
我缺少在子进程中放置一些东西来获取输出,但我不知道:(。
答案 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中也提到过。