Я хочу запустить исполняемый файл изнутри Python, чтобы при выходе вызывающего скрипта Python запущенный exe продолжался бежать. То есть - для запуска exe внутри независимого процесса - не требуется каких-либо межпроцессных связей между этим процессом и процессом, который его создает.
Текущая целевая операционная система в Windows 10 (не Linux, поэтому решения Linux/Unix не применяются), но в идеале решение должно быть независимым от платформы. Я попробовал 2 разных подхода: используя subprocess.Popen() и os.system()
Мне не удалось заставить работать ни одно из «очевидных» решений или предложенных в разных постах на одну и ту же тему. Список различных попыток приведен ниже — закомментирован.
Здесь блокнот используется только для тестирования — фактический исполняемый файл отличается и принимает аргументы командной строки.
Ни одна из них не работает. - при выходе из сценария Python (внутри VS Code) блокнот исчезает.
Код: Выделить всё
import os
import subprocess
# attempts using popen()
# ----------------------
popen_args = [r'C:\Windows\System32\Notepad.exe']
# subprocess.Popen(popen_args)
# subprocess.Popen(popen_args, shell=True)
# subprocess.Popen(popen_args, creationflags=subprocess.DETACHED_PROCESS)
# subprocess.Popen(popen_args, creationflags=subprocess.CREATE_NEW_CONSOLE)
# subprocess.Popen(popen_args, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# subprocess.Popen(popen_args, shell=True, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# subprocess.Popen(popen_args, close_fds=True, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# subprocess.Popen(popen_args, close_fds=True, shell=True, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# subprocess.Popen(popen_args, start_new_session=True)
# subprocess.Popen(popen_args, start_new_session=True, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# subprocess.Popen(popen_args, start_new_session=True, close_fds=True, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# subprocess.Popen(popen_args, start_new_session=True, close_fds=True, shell=True, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# subprocess.Popen(popen_args, shell=True, stdout=None, stdin=None)
# subprocess.Popen(popen_args, shell=True, stdout=None, stdin=None, start_new_session=True)
# subprocess.Popen(popen_args, close_fds=True, stdout=None, stdin=None, start_new_session=True)
# subprocess.Popen(popen_args, close_fds=True, stdout=None, stdin=None, start_new_session=True, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
# attempts using os.system()
# --------------------------
# os.system(r'START "" C:\Windows\System32\Notepad.exe')
# os.system(r'START /b "" "C:\Windows\System32\Notepad.exe"')
Я проделывал подобные операции на нескольких разных языках, но наткнулся на кирпичную стену, пытаясь сделать это на Python.
обновление
- один комментарий связан с публикацией, в которой предлагается использовать опцию start_new_session – im не уверен, что это только Linux/Unix, но в любом случае это не работает. Я обновил список выше, включив в него эти новые неудачные попытки — ни одна из них не сработала.
- также на основе другого комментария — я должен ясно дать понять, что это должно быть неблокирующим, делая это с помощью блокировки позвонить легко - но это не то, что мне нужно. вызывающий процесс должен продолжиться после запуска exe-файла и завершиться должным образом, при этом exe-файл все еще работает.
Подробнее здесь: https://stackoverflow.com/questions/687 ... ys-running
Мобильная версия