Убить Windows асинхронный процесс Popen в 2.4 - PullRequest
0 голосов
/ 04 декабря 2009

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

Ответы [ 2 ]

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

  2. Функция завершения объекта Popen не выполняет ничего, кроме следующего:

    импорт ОС, сигнал

    os.kill (pid, signal.SIGKILL)

pid - это идентификатор процесса дочернего процесса. signal.SIGKILL - это номер 9, и это стандартный сигнал уничтожения Unix. Вы можете увидеть, как порождать подпроцесс и получить его pid в Python 2.4 с помощью модуля popen здесь :

0 голосов
/ 11 октября 2013

@ BrainCore: обратите внимание, что os.kill недоступен в windows в python24, проверьте документы.

Мое решение для уничтожения объекта subprocess.Popen в Windows при использовании python24:

import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)
...