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?

Foi útil?

Solução

  1. 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.

  2. 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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top