J'utilise la commande suivante pour exécuter un script python en arrière-plan:
Nohup ./cmd.py > cmd.log &
Mais il semble que Nohup n’écrive rien dans le fichier journal. cmd.log est créé mais est toujours vide. Dans le script python, j'utilise sys.stdout.write
au lieu de print
pour imprimer sur une sortie standard. Est-ce que je fais quelque chose de mal?
Il semble que vous deviez vider la sortie standard régulièrement (par exemple, sys.stdout.flush()
). Dans mes tests, Python ne le fait pas automatiquement même avec print
jusqu'à la fin du programme.
Vous pouvez exécuter Python avec l'indicateur -u
pour éviter la mise en tampon de sortie:
Nohup python -u ./cmd.py > cmd.log &
Utiliser ' -u ' avec ' Nohup ' a fonctionné pour moi. Tout sera sauvegardé dans le fichier "Nohup.out". Comme ça-
Nohup python -u code.py &
export PYTHONUNBUFFERED=1
Nohup ./cmd.py > cmd.log &
ou
Nohup python -u ./cmd.py > cmd.log &
J'ai eu un problème similaire, mais pas lié à un processus Python. Je courais un script qui a fait un Nohup et le script exécuté périodiquement via Cron.
J'ai pu résoudre le problème en:
PS: mes scripts ont été écrits en ksh sous RHEL
Python 3.3 et supérieur a un argument de couleur pour imprimer et c'est la seule méthode qui a fonctionné pour moi.
print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)