Подпроцесс Popen для запуска команды python - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно запустить команду python внутри Popen. Проблема в том, что команда НУЖНА работать в python3, и мне нужно, чтобы она была переносимой, а это значит, что я не могу использовать псевдоним python3 для каждой ситуации ...

У меня есть компьютеры, где python - это уже правильная версия, а другие, где правильная версия python3. Я попытался вставить #!/usr/bin python3 в начало файла, а затем запустить как python, но это не сработало.

Я не могу изменить переменные среды, чтобы изменить python3 на python. Я хотел бы знать, есть ли способ проверить, какой мне нужно использовать, или способ изменить python3 на python ТОЛЬКО внутри команды Popen ...

Команда Popen, которую я пытаюсь запустить, очень проста, и нет, я не могу просто импортировать файл и использовать его как класс ... его нужно запустить через Popen. Кроме того, virtualenv или аналогичные элементы не подходят.

subprocess.Popen(['python', 'main.py'], shell=True, universal_newlines=True)

1 Ответ

0 голосов
/ 30 августа 2018

Shebang - начальная строка, показывающая, какой интерпретатор использовать, например, #!/usr/bin/python или #!/usr/bin/python3, - учитывается только в том случае, если вы сами явно не выбираете интерпретатор: если вы запускаете python foo.py, ОС вызывает определенный интерпретатор Python и передает его foo.py в качестве аргумента (который он интерпретирует как имя скрипта, который он должен запустить); тогда как когда вы запускаете ./foo.py, вы говорите самой ОС, чтобы выяснить, какой интерпретатор использовать для запуска foo.py, что она делает, посмотрев на шебанг.

Чтобы оставить выбор для операционной системы, просто явно укажите имя вашего скрипта:

subprocess.Popen(['./main.py'], universal_newlines=True)
...