Subprocess.popen не создает независимый процесс - PullRequest
0 голосов
/ 18 марта 2019

У меня есть кусок кода, который отвечает за создание новых независимых процессов (который должен жить после завершения основного процесса).

Когда я запускаю этот код, используя 'run' из PyCharm, они делаютпорождаются независимо и остаются в живых даже после того, как их родительский завершается.

Проблема в том, что при запуске из оболочки cmd (в окнах) они порождаются, но кажется, что они связаны с порождающей оболочкой (несценарий python), поэтому основной сценарий завершается, но оболочка остается активной, и как только я ее закрываю, процессы завершаются.

service_path = "some_service_path"
service_arguments = "some arguments"
python_execution_location = os.path.join(os.environ["PYTHON3_ROOT"], "python.exe")
execution_value = "{} {} {}".format(python_execution_location, service_path, service_arguments)
my_process = subprocess.Popen(execution_value, shell=True)

Ответы [ 2 ]

2 голосов
/ 24 марта 2019

Возможно, вам понадобится отправить аргумент creationflags, чтобы сделать его отдельным процессом

subprocess.Popen(executable, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, close_fds=True)

python.org ссылка

1 голос
/ 22 марта 2019

В Windows вы можете использовать опцию creationflags для Popen.

DETACHED_PROCESS = 8 # bit mask taken from the linked doc below
subprocess.Popen(executable, creationflags=DETACHED_PROCESS, close_fds=True)

Что создаст отдельный процесс (процесс демона).

https://docs.microsoft.com/en-us/windows/desktop/ProcThread/process-creation-flags

Для консольных процессов новый процесс не наследует родительский процесс консоль (по умолчанию). Новый процесс может вызвать AllocConsole функция позже, чтобы создать консоль. Для дополнительной информации, см. Создание консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...