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
.