Sarà shell script chiamato in pitone persistono dopo che lo script python finisce?
-
19-09-2019 - |
Domanda
Nell'ambito di un test automatico, Ho uno script python che ha bisogno di chiamare due script di shell che avviano due server differenti che devono interagire dopo che lo script di chiamata finisce. (In realtà è uno script Jython, ma non sono sicuro che le cose a questo punto.) Che cosa posso fare per garantire che i server rimangono dopo lo script python finisce?
A questo punto si chiamano qualcosa di simile:
def runcmd(str, sleep):
debug('Inside runcmd, executing: ' + str)
os.chdir("/new/dir/")
directory = os.getcwd()
print 'current dir: '+ directory
os.system(str)
t = threading.Thread(
target=runcmd,
args=( cmd, 50,)
)
Soluzione
discussioni Python moriranno tutti con Python. Inoltre, os.system sta bloccando. Ma va bene - se il comando che os.system () gestisce lancia un nuovo processo (ma non un processo figlio), tutto andrà bene. Su Windows, per esempio, se il comando inizia con "start" il 'processo d "start" rimarrà dopo Python muore.
EDIT: nohup
è un equivalente start
su Linux. (Grazie a S. Lott).
Altri suggerimenti
os.system()
non ritorna fino a quando il processo si lancia si è concluso. Utilizzare subprocess
o Runtime.exec()
se si desidera che in un processo separato.
Mi chiedo se si utilizza subprocess.Popen avrebbe funzionato meglio per voi.
forse fare qualcosa di simile shell = True
Le discussioni non funzionano perché sono parte del processo. La chiamata system
non funziona perchè blocchi come il nuovo processo viene eseguito.
Sarà necessario usare qualcosa come os.fork()
per deporre le uova un nuovo processo ed eseguirlo nel nuovo processo. Date un'occhiata a sottoprocesso per alcune buone soluzioni in stile libro di cucina a questo.
In generale, per lanciare un server di lunga durata che è indipendente dal suo genitore, è necessario demonizzare esso. A seconda dell'ambiente, ci sono vari involucri che possono aiutare in questo processo.