Попробуйте выполнить поиск с помощью подпроцесса Python, включая кавычки, не можете найти результат - PullRequest
1 голос
/ 12 марта 2012

У меня есть один файл /tmp/test.txt

this is test
that is test

Когда я бегу

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

Я получил вывод.

Когда я пытаюсь запустить ту же команду с подпроцессом , я не получил вывод. Также возвращается код 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 Grep в этом и пробовал shell=True, но это не работает.

Мне не хватает поместить что-то в подпроцесс, чтобы получить вывод, но что я не знаю: (.

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

С 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

Это также упоминалось в предыдущем вопросе, который вы цитируете.

3 голосов
/ 12 марта 2012

Вы ищете буквенный шаблон "this is", включая кавычки. Измените второй элемент в списке команд на 'this is' вместо '"this is"'.

Кавычечные аргументы нужны только тогда, когда shell=True, и в этом случае оболочка интерпретирует их и все же передает this is без кавычек в grep.

...