Termina processos do Windows assíncrona Popen em 2,4
-
12-09-2019 - |
Pergunta
Eu tenho um script de testes que as necessidades para abrir um processo (um servidor Pyro), fazer algumas coisas que vai chamar o processo aberto para informações, e quando tudo é feito precisará fechar o processo de volta para baixo. É tudo parte de um teste automatizado em um servidor de teste.
Em Python 2.6 você pode fazer isso:
pyro_server = subprocess.Popen(['python', 'pyro_server.py'])
# Do stuff, making remote calls to the Pyro server on occasion
pyro_server.terminate()
Infelizmente, estou trancado em python 2.4 aqui no trabalho, então eu não tenho acesso a essa função. E se eu apenas deixar o fim roteiro, claro, o servidor vive. O que devo fazer para fechar / matar esse processo antes de sair do script?
Solução
-
Considere copiando subprocess.py ao seu python2.4 diretório dist-pacotes. Ele deverá funcionar como é um invólucro simples ao redor da antiga biblioteca popen.
-
O objeto Popen terminar função não faz nada mais do que o seguinte:
import os, sinal
os.kill (pid, signal.SIGKILL)
pid é o ID do processo do processo filho. signal.SIGKILL é o número 9, e é um sinal padrão UNIX kill. Você pode ver como gerar um subprocesso e obter seu pid em python 2.4 com o popen módulo aqui :
Outras dicas
@BrainCore:. Note-se que os.kill não está disponível em janelas em python24, verifique os docs
A minha solução para matar um objeto subprocess.Popen na janela, quando usando python24 é esta:
import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)