Bonjour,
Pour une fois, je peux répondre, mais ce n'est pas un problème python, mais sh.
La deuxième ligne n'est pas claire. Cette commande exécute le programme test2.py en arrière plan, puis branche la sortie sur /dev/null (mais comme le programme est déjà lancé dans son sous-shell, ça ne sert pas à grand chose). D'où le comportement vu à savoir écriture de "test..." sur stdout, lancement en arrière plan de test2.py, avant la fin de son exécution, test de $? (qui est donc le code de sortie du echo de la première ligne...), puis sortie du programme test.py et retour au prompt, puis, enfin, sortie du sous shell de test2.py avec écriture de "toto" sur stdout puisque sa sortie standard à été redirigée trop tard.
Soit le but est d'exécuter en arrière plan test2.py en redirigeant sa sortie sur /dev/ null, auquel cas on écrira ou alors, il s'agit de rediriger stdout et stderr de test2.py sur /dev/null et dans ce cas la syntaxe est
./test2.py &>/dev/null # sans espace entre > et /dev et c'est du bash, pas du sh
Je suppose que la deuxième version est la bonne, le programme correct serait donc
1 2 3 4 5 6 7 8 9
| #!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
cmd = '''echo test...\n'''
cmd += '''./test2.py >/dev/null 2>&1\n''' # sh compatible...
cmd += '''if [ $? -eq 0 ]; then echo "error" >&2; else echo "ok"; fi\n'''
os.system(cmd) |
et on obtient bien la sortie attendue :
1 2 3 4
| moi@moi retoursh $ ./test.py
test...
ok
moi@moi retoursh $ |
Partager