Первый вызов Popen
с shell=False
не означает, что базовый python не будет пытаться открыть окно/консоль. Просто текущий экземпляр python выполняет непосредственно python.exe
, а не в системной оболочке (cmd или sh).
Во-вторых, Popen
возвращает дескриптор процесса, и вы должны выполнить wait()
на этом дескрипторе, чтобы он мог нормально завершаться или вы могли генерировать несуществующий процесс (в зависимости от платформы, на которой вы работаете). Я предлагаю вам попробовать
p = subprocess.Popen(["python.exe", "a.py"], shell=False)
return_code = p.wait()
Ожидать завершения процесса и получить код возврата.
Обратите внимание, что Popen
- очень плохой способ запуска процессов в фоновом режиме. Лучше всего было бы использовать отдельный поток
import subprocess
import threading
def run_it():
subprocess.call(["python.exe", "a.py"], shell=False)
t = threading.Thread(target=run_it)
t.start()
# do your stuff
# in the end
t.join()
Возможный дубликат [Python: подпроцесс вызов с оболочкой = False не работает] (http://stackoverflow.com/questions/25465700/python-subprocess-call- with-shell-false-not-working) –