Как я могу вызвать команду оболочки из Python, которая включает в себя регулярное выражение? - PullRequest
2 голосов
/ 21 октября 2011

Как я могу вызвать команду оболочки из python, которая включает регулярное выражение (т.е. cat filename*).

Я написал:

pid = subprocess.Popen(["cat", filename + "*"])

но я получаю ошибку

имя файла cat * нет такого файла или каталога.

Я бы хотел заставить оболочку обрабатывать "*" как регулярное выражение, а не как строку. Есть ли способ реализовать это?

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

Используйте базовую оболочку для расширения ваших глобусов:

pid = subprocess.Popen(["cat",filename+"*"], shell=True)

В качестве альтернативы, используйте glob.glob для расширения аргументов перед выполнением команды:

import glob
pid = subprocess.Popen(["cat"] + glob.glob(filename + "*"))
4 голосов
/ 21 октября 2011

ПЕРВЫЕ это не регулярное выражение, а расширение оболочки (glob), которое вы, похоже, хотите выполнить. Это означает, что вы должны вызвать / bin / sh для запуска cat. Следующее должно сделать трюк:

pid = subprocess.Popen(["/bin/sh", "-c", "cat", filename + "*"]);

Теперь / bin / sh будет фактически выполнять расширение звездочки для вас, и вы получите желаемый результат.

Или вы можете использовать библиотеку globbing для самостоятельного создания расширений globbing (т.е. выполнять работу, выполняемую оболочкой):

pid = subprocess.Popen(["cat"] + glob.glob(filename + "*"));

glob.glob () возвращает массив файлов, соответствующих глобализации.

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