Je suis tombé sur ceci:
>>> import os
>>> os.system('ls')
file.txt README
0
Quelle est la valeur de retour de os.system()
? Pourquoi j'ai 0?
La valeur de retour de os.system
dépend du système d'exploitation.
Sous Unix, la valeur de retour est un nombre de 16 bits contenant deux informations différentes. De la documentation:
un numéro de 16 bits, dont l'octet inférieur est le numéro du signal qui a tué le processus et dont l'octet supérieur est l'état de sortie (si le numéro du signal est zéro)
Donc, si le numéro de signal (octet inférieur) est 0, il serait théoriquement prudent de décaler le résultat de 8 bits (result >> 8
) pour obtenir le code d'erreur. La fonction os.WEXITSTATUS
fait exactement cela. Si le code d'erreur est 0, cela signifie généralement que le processus s'est terminé sans erreur.
Sous Windows, la documentation spécifie que la valeur de retour de os.system
dépend de Shell. Si le shell est cmd.exe
(valeur par défaut), la valeur est le code de retour du processus. Encore une fois, 0 signifierait qu'il n'y avait pas d'erreur.
Pour les autres codes d'erreur:
os.system('command')
renvoie un nombre de 16 bits, dont les 8 premiers bits de gauche (lsb) parlent du signal utilisé par l'OS pour fermer la commande, Les 8 prochains bits parlent du code de retour de la commande.
00000000 00000000
exit code signal num
Exemple 1 - Commande exit avec le code 1
os.system('command') #it returns 256
256 in 16 bits - 00000001 00000000
Exit code is 00000001 which means 1
Exemple 2 - Commande exit avec le code 3
os.system('command') # it returns 768
768 in 16 bits - 00000011 00000000
Exit code is 00000011 which means 3
Maintenant, essayez avec signal - Exemple 3 - Ecrivez un programme qui dort longtemps, utilisez-le comme commande dans os.system (), puis tuez-le avec kill -15 ou kill -9
os.system('command') #it returns signal num by which it is killed
15 in bits - 00000000 00001111
Signal num is 00001111 which means 15
Vous pouvez avoir un programme python en tant que command = 'python command.py'
import sys
sys.exit(n) # here n would be exit code
Dans le cas d'un programme c ou c ++, vous pouvez utiliser return depuis main () ou exit (n) depuis n'importe quelle fonction #
Note - Ceci est applicable sur unix
Sous Unix, la valeur de retour est l’état de sortie du processus codé au format spécifié pour wait (). Notez que POSIX ne spécifie pas la signification de la valeur de retour de la fonction C system (). La valeur de retour de la fonction Python dépend donc du système.
os.wait ()
Attendez la fin d’un processus enfant et renvoyez un tuple contenant son pid et son indication de sortie: nombre à 16 bits, dont l’octet de poids faible est le numéro du signal qui a tué le processus et dont l’octet de poids élevé est l’état de sortie (si le signal le nombre est zéro); le bit haut de l'octet bas est défini si un fichier de base a été produit.
Availability: Unix
.
"Sous Unix, la valeur de retour est l’état de sortie du processus codé au format spécifié pour wait (). Notez que POSIX ne spécifie pas la signification de la valeur de retour de la fonction C system (), la valeur de retour de la Python dépend du système. "
http://docs.python.org/library/os.html#os.system
Il n'y a pas d'erreur, le code de sortie est donc zéro
os.system () renvoie une sortie unix, pas la sortie de la commande. Donc, s'il n'y a pas d'erreur, le code de sortie écrit en tant que 0.
Vous voudrez peut-être utiliser
return_value = os.popen('ls').read()
au lieu. os.system
renvoie uniquement la valeur d'erreur.