GNU/Linux >> Linux Esercitazione >  >> Linux

Lo script Nohup per Python non funziona durante l'esecuzione in background con &

Devi svuotare stdout dopo la stampa:sys.stdout.flush(); altrimenti ci vorrà un po' per riempire il buffer stdout.


Passa a Python il flag -u per l'unbuffering di stdout

nohup python -u test.py &

Python bufferizzerà lo stdout altrimenti. Ciò non richiede una modifica del codice.

Dalla pagina man:

       -u     Force  stdin,  stdout and stderr to be totally unbuffered.  On systems where it matters, also put stdin, stdout
          and stderr in binary mode.  Note that there is internal buffering in xreadlines(), readlines() and  file-object
          iterators ("for line in sys.stdin") which is not influenced by this option.  To work around this, you will want
          to use "sys.stdin.readline()" inside a "while 1:" loop.

Ho appena avuto un problema simile. La mia sceneggiatura ha funzionato bene senza nohup. Con nohup, lo script andrebbe in crash con un SyntaxError.

Il problema era il contesto di esecuzione di nohup che usava un alias di python mappato a python2 invece di python3 .

Risolto specificando python3 invece di python .


Linux
  1. Esecuzione dello script con ". ” E con “fonte”?

  2. Il modo "corretto" per verificare se un servizio è in esecuzione in uno script?

  3. Problemi con la tastiera che non funziona all'avvio?

  4. nohup:comando non trovato

  5. Cambia la directory di lavoro nella shell con uno script python

Il tutorial del comando fc con esempi per principianti

Lavorare con il kernel in tempo reale per Red Hat Enterprise Linux

Pyzo - L'editor interattivo per Python scientifico

Debug in pyCharm con privilegi sudo?

Come uccidere lo script Python con lo script bash

Rendi lo script Python combinato con i pacchetti Linux facilmente installabili per l'utente finale