Uccidere di Windows asincrono processo Popen in 2.4
-
12-09-2019 - |
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?
Soluzione
-
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.
-
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)