2012-10-16 11 views
80

Sto usando il seguente comando per eseguire uno script python in background:nohup non sta scrivendo log file di output

nohup ./cmd.py > cmd.log & 

Ma sembra che nohup non scrive nulla nel file di registro. cmd.log viene creato ma è sempre vuoto. Nello script python, sto usando sys.stdout.write anziché print per stampare sullo standard output. Sto facendo qualcosa di sbagliato?

+0

Quale variante di 'nohup' stai usando? La versione BSD scrive in un file chiamato 'nohup.out' nella directory corrente (o' $ HOME/nohup.out' se la directory corrente non è scrivibile). Non vedo un modo per cambiare il nome del file di output ... – wulong

+0

@wulong Questo è solo se se stdout è un terminale. –

+0

Ho anche provato il comando senza reindirizzamento e non ha creato il file nohup.out. Non so quale variante sia ma sono su SunOS 5.10 se questo aiuta. – ezbentley

risposta

69

Sembra che sia necessario svuotare periodicamente lo stdout (ad esempio sys.stdout.flush()). Nel mio test Python non lo fa automaticamente nemmeno con print fino all'uscita dal programma.

+0

Grazie. Questo funziona. – ezbentley

+13

python e altri programmi basati su Cdddion utilizzano il buffering di riga in caso interattivo (stdout è connesso a un tty) e il buffering di blocco quando viene reindirizzato a un file. Se 'python -u' non funziona; 'nohup' potrebbe aver introdotto il proprio buffering. – jfs

+8

@ J.F.Sebastian A partire da oggi, 'nohup' non bufferizza l'output e' python -u' funziona correttamente. (solo un aggiornamento per le persone) – Pijusn

200

È possibile eseguire Python con la bandiera -u per evitare il buffering:

nohup python -u ./cmd.py > cmd.log & 
+7

Questo è meglio! Grazie mille :) – Sadjad

+1

questo sarebbe un problema di prestazioni? – kommradHomer

+0

@kommradHomer Suppongo che dipenda dalla quantità di output su stdout/stderr prodotto dal programma. – vz0

12

Utilizzando '-u' con 'nohup' ha funzionato per me. Tutto verrà salvato nel file "nohup.out". Mi piace-

nohup python -u code.py & 
+0

Qual è la differenza con la risposta di @ vz0? – Deqing

+0

@Deqing non c'è differenza. – Overcode

Problemi correlati