GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Nohup für Python-Skript funktioniert nicht, wenn es im Hintergrund mit &ausgeführt wird

Sie müssen stdout spülen nach Druck:sys.stdout.flush(); andernfalls dauert es eine Weile, bis der stdout-Puffer gefüllt ist.


Übergeben Sie Python das Flag -u zum Entpuffern von stdout

nohup python -u test.py &

Andernfalls puffert Python stdout. Dies erfordert keine Codeänderung.

Aus der Manpage:

       -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.

Hatte gerade ein ähnliches Problem. Mein Skript funktionierte gut ohne nohup. Bei nohup würde das Skript mit einem SyntaxError abstürzen.

Das Problem war der Ausführungskontext von nohup, der einen Alias ​​von python verwenden würde zugeordnet zu python2 statt python3 .

Behoben durch Angabe von python3 statt python .


Linux
  1. .bash_profile nicht bezogen, wenn Su ausgeführt wird?

  2. Ändern Sie das Arbeitsverzeichnis in der Shell mit einem Python-Skript

  3. Python-Skript kann nicht mit Strg-C beendet werden

  4. Ubuntu Python Shebang-Zeile funktioniert nicht

  5. Ausführen eines Python-Skripts von PHP

Das fc Command Tutorial mit Beispielen für Anfänger

Arbeiten mit dem Echtzeit-Kernel für Red Hat Enterprise Linux

Pyzo – Der interaktive Editor für Scientific Python

Debuggen in pyCharm mit sudo-Berechtigungen?

pytest läuft mit einer anderen Version von Python

Machen Sie Python-Skript in Kombination mit Linux-Paketen für Endbenutzer einfach installierbar