Domanda

Ho uno script di test che ha bisogno di aprire un processo (un server Piro), fare alcune cose che chiamerà il processo aperto di informazioni, e quando è tutto fatto sarà necessario chiudere il processo verso il basso. Fa tutto parte di un test automatico su un server di gestione temporanea.

In Python 2.6 si può fare questo:

pyro_server = subprocess.Popen(['python', 'pyro_server.py'])
# Do stuff, making remote calls to the Pyro server on occasion
pyro_server.terminate()

Purtroppo, sto bloccato in python 2.4 qui al lavoro in modo da non ho accesso a tale funzione. E se io lascio la fine sceneggiatura, naturalmente, il server continua a vivere. Cosa dovrei fare per chiudere / uccidere quel processo prima che lo script esce?

È stato utile?

Soluzione

  1. Si consideri la copia subprocess.py nella directory dist-packages python2.4. Si deve solo funzionare come si tratta di un semplice involucro intorno alla vecchia biblioteca popen.

  2. L'oggetto Popen terminare funzione non fa altro che il seguente:

    import os, segnale

    os.kill (pid, signal.SIGKILL)

pid è l'identificativo del processo processo figlio. signal.SIGKILL è il numero 9, ed è un segnale kill standard UNIX. Si può vedere come per deporre le uova un sottoprocesso e ottenere il suo pid in python 2.4 con il modulo popen qui :

Altri suggerimenti

@BrainCore:. Si noti che os.kill non è disponibile su finestre in Python24, controllare i documenti

La mia soluzione per l'uccisione di un oggetto subprocess.Popen sulle finestre quando si utilizza Python24 è questo:

import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top