GNU/Linux >> Tutoriels Linux >  >> Linux

Nohup pour le script Python ne fonctionne pas lors de l'exécution en arrière-plan avec &

Vous devez vider stdout après impression :sys.stdout.flush(); sinon, il faudra un certain temps pour remplir le tampon stdout.


Passez à python l'indicateur -u pour supprimer la mémoire tampon de la sortie standard

nohup python -u test.py &

Sinon, Python mettra en mémoire tampon stdout. Cela ne nécessite pas de changement de code.

À partir de la page de manuel :

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

Je viens d'avoir un problème similaire. Mon script a bien fonctionné sans nohup. Avec nohup, le script plantait avec une SyntaxError.

Le problème était le contexte d'exécution de nohup qui utiliserait un alias de python mappé à python2 au lieu de python3 .

Corrigé en spécifiant python3 au lieu de python .


Linux
  1. Exécution du script avec ". » Et avec « source » ?

  2. La "bonne" façon de tester si un service s'exécute dans un script ?

  3. nohup :commande introuvable

  4. Comment un script bash peut-il connaître le répertoire dans lequel il est installé lorsqu'il est sourcé avec . opérateur?

  5. Changer le répertoire de travail dans le shell avec un script python

Le didacticiel de commande fc avec des exemples pour les débutants

Travailler avec le noyau en temps réel pour Red Hat Enterprise Linux

Pyzo - L'éditeur interactif pour Python scientifique

Déboguer dans pyCharm avec les privilèges sudo ?

Comment installer PhantomJS pour une utilisation avec Python Selenium sur le Raspberry Pi ?

Rendre le script Python combiné avec des packages Linux faciles à installer pour l'utilisateur final