У меня есть простой скрипт, который вызывает другой скрипт python в качестве подпроцесса. Я могу подтвердить, что подпроцесс запущен, и я могу захватить его PID.Python: Завершить подпроцесс = Успех, но он все еще работает (?)
Когда я пытаюсь завершить подпроцесс (в win), я получаю сообщение SUCCESS против правильного идентификатора PID, но диспетчер задач Windows показывает, что 2-й процесс python.exe все еще работает.
Любые предложения для выполнения этой задачи в Win? Я буду простирающимся это работать в OSX и Linux в конце концов:
Упрощенный:
#!/usr/bin/env python
import os, sys
import subprocess
from subprocess import Popen, PIPE, STDOUT, check_call
pyTivoPath="c:\pyTivo\pyTivo.py"
print "\nmyPID: %d" % os.getpid()
## Start pyTivo ##
py_process = subprocess.Popen(pyTivoPath, shell=True, stdout=PIPE, stderr=subprocess.STDOUT)
print "newPID: %s" % py_process.pid
## Terminate pyTivo ##
#py_process.terminate() - for nonWin (?)
py_kill = subprocess.Popen("TASKKILL /PID "+ str(py_process.pid) + " /f")
raw_input("\nPress Enter to continue...")
Примечания: требуется python2.7, эти утилиты не указано
Что случилось с 'Popen.terminate'? s он делает соответствующий вызов win api в Windows. – Dunes
Я заметил, что при запуске subprocess.Popen создаются два процесса. «cmd.exe» и «python.exe». PID, который я получаю от py_process.pid, указывает на «cmd.exe». Я только завершаю «cmd.exe» в своем скрипте. Непонятно, как также захватить PID для «python.exe». –
Всё: python.exe - это ребенок cmd.exe. Я добавил переключатель «/ T» в мою команду TASKKILL, и это также убивает процесс python.exe! –