7
votes

Comment interpréter le code d'état dans les commandes Python.getStatuTusOutput ()

dans un Question associée , j'ai demandé où trouver la documentation de la fonction C "attend". C'était une tentative de déterminer les codes de retour pour le module Commands.getstatusOutput (). Stackoverflow a eu lieu, mais la documentation n'a pas aidé. Voici ce qui me puzzle Me:

$ ls /fail ; echo $?
ls: cannot access /fail: No such file or directory
2


1 commentaires

Le Réponse de @schof répond à la question "lors de l'utilisation de Commands.getstatusoutput () Pourquoi le Codes de sortie multipliés par 256? " directement et avec le code exemple. Les deux autres réponses plus ou moins disent "Utiliser sous-processus au lieu de Commands.getstatusoutput () " ou "Voici comment utiliser le sous-processus".


4 Réponses :



3
votes

regarder Commands.py : xxx

Nous voyons STS contient la valeur de OS.Popen (.. .). Fermer () . En regardant cette documentation , Os.popen (...). Fermer () Renvoie la valeur de OS.WAIT :

OS.Wait ()

Attendez l'achèvement d'un processus enfant et renvoyez un tuple contenant son indication d'état PID et de sortie: un nombre de 16 bits, dont l'octet faible est le numéro de signal qui a tué le processus et dont le haut octet est le statut de sortie (si le numéro de signal est zéro); Le bit élevé de l'octet faible est défini si un fichier de base a été produit. Disponibilité: Unix.

L'accent était mis. Je conviens que ce "codage" n'est pas terriblement intuitif, mais au moins il était assez évident d'un coup d'œil qu'il était multiplié / décalé de bit.


1 commentaires

Merci de l'accent, j'étais assez confus par ce que je voyais jusqu'à ce que je lisais ça ..



11
votes

Il existe un ensemble de fonctions dans le module OS ( os.wifcontinuer , os.wifstopped , os.wtermsig , os.wcoredump , os.wifexited , os.wexittstatus , os.wifsignaled , os.wstopsig ), qui correspond aux macros de Attendez ( 2) manuel. Vous devez les utiliser pour interpréter le code d'état.

Par exemple, pour obtenir le code de sortie, vous devez utiliser os.wexittstatus (status)

Une meilleure idée serait de basculer vers le module sous-processus .


0 commentaires

0
votes

Je pense que la détection de code est incorrecte.

"Si un fichier de base a été produit, le bit haut de l'octet bas est défini." signifie 128.

donc je pense que la ligne de base doit être xxx


0 commentaires