Я работаю на платформе Windows. В моем питон скрипт, я могу сделать вызов внешней программы следующим образом:Как узнать, завершился ли внешний процесс в python?
os.system("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")
os.popen("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")
subprocess.call(["C:\mainfolder\menu.exe","C:\others\file1.inp" "C:\others\file2.inp"])
где:
menu.exe: это мой внешнюю программу.
file1 и file2: входные файлы в мою внешнюю программу.
Все это работает отлично. Теперь, когда моя внешняя программа завершилась успешно, мне нужно полностью закрыть ее вместе со всеми открытыми ею окнами. Я прошел через много других сообщений, питона документации, и т.д., и нашел команды, как, например:
os.system("taskkill /im C:\mainfolder\menu.exe")
os.kill(proc.pid,9)
child.kill()
Но они не работали. Я потратил много времени на то, чтобы найти что-то, что сработало для меня, пока я не понял, что независимо от того, какие команды я набираю после, они не будут прочитаны, поскольку компьютер не знает, что моя внешняя программа закончена. Именно по этой причине я могу легко завершить программу из командной строки в любое время, просто набрав taskkill/im menu.exe, но не из python.
Кто-нибудь знает, как разобраться в этом ?, включить ли я что-то еще, когда я позвоню своей внешней программе?
Если программа, которую вы звоните открывает другие программы, вы не можете быть в состоянии сделать что-нибудь об этом. Хотя я не уверен. –
Серьезно ?, Я не слишком много знаю о программировании, но я всегда думал, что в программировании все возможно.Надеюсь, я найду ответ на этот вопрос :-( – Sarah
Если вы можете изменить открытые программы для отправки сигнала вашему процессу прямо перед тем, как они закрываются (например, через DBus), вы можете использовать IPC, чтобы понять это. – BlackVegetable