Sunny
Ноя. 16, 2007 12:09:40
Как мне при повторном запуске приложения (запускаю с помощью os.spawnv) закрыть запущенное ранее. У меня по нажатию кнопки в главном приложении должно загружаться приложение(wordpad), а при повторном её нажатии запускаться оно же но с новыми параметрами.
setoy
Ноя. 19, 2007 17:59:00
Думаю, способ нет:( Мне тоже было нужно когда-то, не нашел
Viper
Ноя. 19, 2007 18:31:26
os.spawn возвращает ID процесса и по этой айдишке старый процесс можно убивать.
poltergeist
Ноя. 19, 2007 19:41:55
Есть способы:
- спомощью 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 - они доступны из командной строки, но это консольные приложение и не очень красиво, когда они вылетают по ходу работы гуевой программы.
pyuser
Ноя. 20, 2007 01:54:27
По поводу завершения процессов под Windows рекомендую посмотреть
http://rsdn.ru/article/qna/baseserv/killproc.xml
setoy
Ноя. 20, 2007 15:00:00
Большое спасибо, poltergeist & pyuser! Вот последний линк очень интересный :)
os.spawn - я нигде не вижу, что возвращает PID. Если дейвствително возвращает - тогда ОК
Viper
Ноя. 20, 2007 18:13:05
Python Documentation
If mode is P_NOWAIT, this function returns the process ID of the new process