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,)
    )
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top