Расширение оболочки в подпроцессе Python [дубликат]


Возможный дубликат:
Использование подстановочных знаков подпроцесса Python

Используя модуль подпроцесса Python 2.6, мне нужно выполнить команду на src.rpm-файл, который я создаю с помощью предыдущего вызова подпроцесса.

К сожалению, я работаю с файлами спецификаций, которые не согласованы, поэтому у меня есть только смутное представление о том, что такое имя файла src.rpm должен выглядеть так (например, я знаю имя пакета и расширение в чем-то названном "{версия пакета}.src.rpm", но не версия).

Однако я знаю, что у меня будет только один src.rpm-файл в каталоге, который я ищу, поэтому я могу вызвать mock с помощью команды

mock {options} *.src.rpm

И заставить его работать в оболочке, но подпроцесс, похоже, не хочет принимать расширение. Я пробовал использовать (shell=True) в качестве аргумента для подпроцесса.call () но даже если бы это сработало, я предпочел бы избежать этого.

Как мне получить что-то вроде

subprocess.call("mock *.src.rpm".split())

К бежать?

2 3

2 ответа:

Используйте пакет glob:

import subprocess    
from glob import glob
subprocess.call(["mock"] + glob("*.src.rpm"))

Подстановочный знак * должен быть интерпретирован оболочкой. При запуске подпроцесса.вызов, по умолчанию он не загружает оболочку, но вы можете дать ему shell=True в качестве аргумента:

subprocess.call("mock *.src.rpm".split(), shell=True)