Уничтожьте асинхронный всплывающий процесс Windows в версии 2.4

StackOverflow https://stackoverflow.com/questions/1842985

  •  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, поэтому у меня нет доступа к этой функции.И если я просто позволю сценарию завершиться, то, конечно, сервер продолжит свою работу.Что я должен делать, чтобы закрыть / остановить этот процесс до завершения работы скрипта?

Это было полезно?

Решение

  1. Рассмотрите возможность копирования subprocess.py в ваш каталог python2.4 dist-packages.Это должно просто работать, поскольку это простая оболочка вокруг старой библиотеки popen.

  2. Функция завершения 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top