Форум сайта python.su
3
Запущен процесс pvengine.exe на длительное время. Пока процесс идёт, нужно ещё раз вызвать pvengine.exe и убить его, чтобы первый запущенный не пострадал.
Я нарыл TASKKILL, но что-то совсем не разобрался с этими PID, если это, вообще, то, что нужно.
Офлайн
31
Убивает новые процессы
import wmi import subprocess c = wmi.WMI() process_watcher = c.Win32_Process.watch_for("creation") #subprocess.Popen('taskkill /PID %s /T /f' % 'explorer.exe', shell = True) while True: new_process = process_watcher() print new_process.Caption subprocess.Popen('taskkill /PID %s /T /f' % new_process.Caption, shell = True)
import psutil PROCNAME = "notepad.exe" for proc in psutil.process_iter(): if proc.name == PROCNAME: print proc.name print proc.pid proc.kill()
Отредактировано sanodin (Авг. 31, 2013 18:02:05)
Офлайн
3
sanodin, благодарствую! Завтра проверю, сегодня уже башка совсем не варит.
Я просто поясню, что именно было нужно:
Рендер поврей в винде открывает своё окно IDLE зачем-то всегда и, хотя просчёт окончен, процесс всё-равно считается незавершённым, пока не ткнёшь курсором в крестик на шапке и не закроешь это окно. Но, у меня рендер задействован как для просчёта трёхмерной сцены, так и для создания превьюшек текстур. То есть, юзер может запустить просчёт сцены на несколько десятков минут и, в это же время настраивать текстуру для какого-нибудь объекта вновь и вновь вызывая pvengine.exe. При этом ему без конца и края придётся вручную закрывать окно. В линуксе такого безобразия нету с этой прогой.
Так вот, собственно, я и использую subprocess для старта.
Для линукса мне пришлось написать вот так:
p1=subprocess.Popen(["%s"%pov_binary,"-d","%s/Preview.ini"%previewDir],stdout=subprocess.PIPE,stderr=subprocess.STDOUT) p1.wait()
Отредактировано leonid_10 (Авг. 31, 2013 19:20:27)
Офлайн