Подпроцесс не может запустить исполняемый файл Python в неинтерактивном режиме? - PullRequest
0 голосов
/ 17 мая 2018

Я использую модуль Python 3.6.3 и subprocess для запуска другого скрипта Python

#  main.py

#!/bin/env python
from subprocess import Popen,PIPE
from sys import executable

p = Popen([executable, 'test.py', 'arg1'],shell=True, stdout=PIPE)
p.wait()
print(p.stdout.read().decode())

и

#  test.py

import sys
print(sys.argv)

Я ожидаю, что он будет запускаться и выполняться test.py.Тем не менее, он открывает интерпретатор Python в интерактивном режиме!

Я протестировал вариант shell=False, он работает.Я протестировал строковую форму, а не форму списка args, она работает.

Я не уверен, является ли это ошибкой или нет.

1 Ответ

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

Вам необходимо удалить shell=True или изменить первый аргумент на executable + ' test.py arg1' вместо [executable, 'test.py', 'arg1'].

Как объяснено в документации , с shell = True, этобудет запускаться как /bin/sh -c python test.py arg1, что означает, что python будет выполняться без аргументов.

...