Уничтожьте асинхронный всплывающий процесс Windows в версии 2.4
-
12-09-2019 - |
Вопрос
У меня есть тестовый скрипт, которому нужно открыть процесс (сервер Pyro), выполнить некоторые действия, которые вызовут открытый процесс для получения информации, и когда все это будет сделано, нужно будет снова закрыть процесс.Все это часть автоматического тестирования на промежуточном сервере.
В python 2.6 вы можете сделать это:
pyro_server = subprocess.Popen(['python', 'pyro_server.py'])
# Do stuff, making remote calls to the Pyro server on occasion
pyro_server.terminate()
Увы, здесь, на работе, я привязан к python 2.4, поэтому у меня нет доступа к этой функции.И если я просто позволю сценарию завершиться, то, конечно, сервер продолжит свою работу.Что я должен делать, чтобы закрыть / остановить этот процесс до завершения работы скрипта?
Решение
Рассмотрите возможность копирования subprocess.py в ваш каталог python2.4 dist-packages.Это должно просто работать, поскольку это простая оболочка вокруг старой библиотеки popen.
Функция завершения Popen object не делает ничего, кроме следующего:
импортировать ОС, сигнал
os.уничтожить (pid, сигнал.SIGKILL)
pid - это идентификатор процесса дочернего процесса.сигнал.SIGKILL - это число 9, и это стандартный сигнал завершения работы unix.Вы можете увидеть, как создать подпроцесс и получить его pid в python 2.4 с помощью модуля popen здесь:
Другие советы
@Мозговой центр:Обратите внимание, что os.kill недоступен в Windows в python24, проверьте документы.
Мое решение для уничтожения подпроцесса.Всплывающий объект в Windows при использовании python24 - это:
import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)