Я использовал этот скрипт на python2, чтобы запустить приложение, а затем немедленно выйти из скрипта python, не дожидаясь завершения дочернего процесса.Это был мой код:
kwargs = {}
if platform.system() == 'Windows':
# from msdn [1]
CREATE_NEW_PROCESS_GROUP = 0x00000200 # note: could get it from subprocess
DETACHED_PROCESS = 0x00000008 # 0x8 | 0x200 == 0x208
kwargs.update(creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
kwargs.update(stderr=subprocess.PIPE)
elif sys.version_info < (3, 2): # assume posix
kwargs.update(preexec_fn=os.setsid)
else: # Python 3.2+ and Unix
kwargs.update(start_new_session=True)
subprocess.Popen([APP], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,**kwargs)
Он работает нормально на python 2.7, но не запускает ожидаемое «приложение» на python 3.7 без изменений.
Для того, чтобы заставить его работатьв python3 я нашел два независимых обходных пути:
- Измените stderr на это: stderr = подпроцесс.DEVNULL
или
Добавить вызов
time.sleep (0.1) после
Popen (до закрытия скрипта).
Я предполагаю, что это на самом деле не связанок python, но к какому-либо событию, которое должно произойти после того, как процесс будет открыт, прежде чем скрипт python сможет безопасно завершиться?
Есть какие-нибудь подсказки?Я действительно хотел бы знать, почему это происходит.Прямо сейчас я просто добавил сон звонок.
Спасибо