Использование регулярного выражения egrep в модуле Python подпроцесса - PullRequest
0 голосов
/ 29 мая 2018

Мне нужна помощь для поиска шаблона регулярных выражений с помощью модуля подпроцесса python.

Например,

cmd = 'egrep "MEMBER xe-.* xe-.*" -h -o /home/temp.txt'

cmd_output,cmd_err = Popen(cmd.split(), stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()

Я понимаю, * не расширяется с помощью Popen, и поэтому я попытался также с shell=True, но я не могу получить желаемый результат.

1 Ответ

0 голосов
/ 29 мая 2018

При использовании shell=True вы должны предоставить команду в виде строки вместо списка:

cmd_output,cmd_err = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True).communicate()

При передаче списка вместо этого не будет выполнять то, что вы ожидаете :

В POSIX с shell = True оболочкой по умолчанию является / bin / sh.Если args является строкой, строка определяет команду для выполнения через оболочку.Это означает, что строка должна быть отформатирована точно так же, как при вводе в командной строке.Это включает, например, кавычки или обратную косую черту, экранирующие имена файлов с пробелами в них.Если args - последовательность, первый элемент задает командную строку, и любые дополнительные элементы будут обрабатываться как дополнительные аргументы самой оболочки.

Тем не менее, возможно, проще, безопаснее, более переносимо и надежнее просто выполнять эту обработку в Python.У него отличные возможности регулярных выражений , и все вышеперечисленное означает всего несколько строк кода Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...