Форум сайта python.su
Как мне при повторном запуске приложения (запускаю с помощью os.spawnv) закрыть запущенное ранее. У меня по нажатию кнопки в главном приложении должно загружаться приложение(wordpad), а при повторном её нажатии запускаться оно же но с новыми параметрами.
Офлайн
Думаю, способ нет:( Мне тоже было нужно когда-то, не нашел
Офлайн
os.spawn возвращает ID процесса и по этой айдишке старый процесс можно убивать.
Офлайн
Есть способы:
- спомощью pywin32
- с помощью ctypes
import subprocess, ctypes, time
process = subprocess.Popen()
time.sleep(3)
ctypes.windll.kernel32.TerminateProcess(int(process._handle), -1)
или
import subprocess, ctypes, time
pid = subprocess.Popen().pid
time.sleep(3)
handle = ctypes.windll.kernel32.OpenProcess(1, False, pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)
Можно ещё запускать утилиту taskkill или tskill - они доступны из командной строки, но это консольные приложение и не очень красиво, когда они вылетают по ходу работы гуевой программы.
Отредактировано (Ноя. 19, 2007 19:45:24)
Офлайн
По поводу завершения процессов под Windows рекомендую посмотреть http://rsdn.ru/article/qna/baseserv/killproc.xml
Офлайн
Большое спасибо, poltergeist & pyuser! Вот последний линк очень интересный :)
os.spawn - я нигде не вижу, что возвращает PID. Если дейвствително возвращает - тогда ОК
Офлайн
Python Documentation
If mode is P_NOWAIT, this function returns the process ID of the new process
Офлайн