GNU/Linux >> Znalost Linux >  >> Linux

Skript Nohup pro Python nefunguje, když běží na pozadí s &

Musíte vyprázdnit stdout po vytištění:sys.stdout.flush(); jinak bude chvíli trvat, než se naplní stdout buffer.


Předejte pythonu příznak -u pro zrušení vyrovnávací paměti stdout

nohup python -u test.py &

Jinak Python uloží stdout do vyrovnávací paměti. To nevyžaduje změnu kódu.

Z manuálové stránky:

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

Právě jsem měl podobný problém. Můj skript fungoval dobře bez nohyp. S nohoup by skript selhal s chybou SyntaxError.

Problém byl v kontextu provádění nohup, který by používal alias python mapováno na python2 místo python3 .

Opraveno zadáním python3 místo python .


Linux
  1. Spuštění skriptu s „. “ A se „zdrojem“?

  2. „Správný“ způsob, jak otestovat, zda služba běží ve skriptu?

  3. Skript Python nelze zabít pomocí Ctrl-C

  1. .bash_profile není při spuštění Su?

  2. Spuštění skriptu Python z PHP

  3. Jak nainstalovat PhantomJS pro použití s ​​Python Selenium na Raspberry Pi?

  1. Problémy s nefunkční klávesnicí při spouštění?

  2. nohup:příkaz nenalezen

  3. Jak může bash skript znát adresář, ve kterém je nainstalován, když je zdrojem . operátor?