Выполнение скриптов Python с помощью subprocess.call с использованием shebang - PullRequest
3 голосов
/ 22 июня 2011

Я пишу (несколько) модульное приложение на Python 3, и я хотел бы запускать из него произвольные программы, указанная программа указывается во время выполнения и не обязательно является скриптом Python.

Поэтому я используюнапример,

subprocess.call([spam, "-i", eggs, "-o", ham])

Если spam - это сценарий Python с шебангом на python3 и правами на выполнение, я получу

OSError: [Errno 8] Exec format error

, если я

subprocess.call(["python3", spam, "-i", eggs, "-o", ham])

работает нормально.

Знаете почему?Как я могу запустить spam без указания python3?

Ответы [ 2 ]

8 голосов
/ 22 июня 2011

Вам необходимо использовать shell=True, и вам нужно превратить ваш массив в командную строку, например:

subprocess.call(' '.join([spam, "-i", eggs, "-o", ham]), shell=True)

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

0 голосов
/ 22 июня 2011

Попробуйте

subprocess.call(['spam.py', "-i", eggs, "-o", ham])
...