Je suis tombé sur ça :
>>> import os
>>> os.system('ls')
file.txt README
0
Quelle est la valeur de retour de os.system()
? Pourquoi j'obtiens 0 ?
Je suis tombé sur ça :
>>> import os
>>> os.system('ls')
file.txt README
0
Quelle est la valeur de retour de os.system()
? Pourquoi j'obtiens 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 qui contient deux informations différentes. Extrait de la documentation :
un nombre de 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 fort est l'état de sortie (si le numéro du signal est égal à zéro).
Ainsi, si le numéro du signal (octet de poids faible) est 0, il serait, en théorie, sûr 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 précise que la valeur de retour de la fonction os.system
est dépendant du shell. Si l'interpréteur de commandes est cmd.exe
(celui par défaut), la valeur est le code de retour du processus. Là encore, 0 signifierait qu'il n'y a pas eu d'erreurs.
Pour les autres codes d'erreur :
os.system('command')
retourne un nombre de 16 bits, dont les 8 premiers bits de gauche (lsb) parlent du signal utilisé par os pour fermer la commande, les 8 bits suivants parlent du code de retour de la commande.
00000000 00000000
exit code signal num
Exemple 1 - sortie de la commande 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 - sortie de la commande 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 le signal - Exemple 3 - Ecrivez un programme qui dort pendant un long moment, utilisez-le comme commande dans os.system() et ensuite tuez-le par 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 comme 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 de main() ou exit(n) de n'importe quelle fonction #.
Note - Ceci est applicable sur unix
Sous Unix, la valeur de retour est l'état de sortie du processus encodé au format spécifié pour wait(). Notez que POSIX ne spécifie pas la spécifie pas la signification de la valeur de retour de la fonction C system(). la valeur de retour de la fonction Python est dépendante du système.
os.wait()
Attend l'achèvement d'un processus enfant, et renvoie un tuple contenant son pid et l'indication du statut de sortie : un nombre de 16 bits, dont l'octet de l'octet de poids faible est le numéro du signal qui a tué le processus, et dont l'octet de poids fort est le l'octet de poids fort est l'état de sortie (si le numéro du signal est égal à zéro). de l'octet de poids faible est défini si un fichier de base a été produit.
Availability: Unix
.
"Sous Unix, la valeur de retour est le statut de sortie du processus encodé dans le format spécifié pour wait(). Notez que POSIX ne spécifie pas la signification de la valeur de retour de la fonction C system() en C, la valeur de retour de la fonction fonction Python est dépendante du système".
http://docs.python.org/library/os.html#os.system
Il n'y a pas d'erreur, donc le code de sortie est zéro.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.