Python >> Tutoriel Python >  >> Python

Lors de l'utilisation de os.execlp, pourquoi `python` a besoin de `python` comme argv [0]

Lorsque python est exécuté, il crée sys.argv pour toi. Les valeurs de cette liste sont basées sur les arguments qui lui sont passés par le système d'exploitation, mais il s'arrête le sys.executable valeur de cette liste.

En d'autres termes, lorsque Python est invoqué, il définit sys.argv à tout mais c'est son propre exécutable .

Lorsque vous invoquez un nouveau exécutable via os.execlp() , vous devez toujours inclure Python car c'est l'exécutable que le système d'exploitation exécutera. Les deux premières valeurs de ce que vous a passez à os.execlp() sont toujours nécessaires, quoi que vous trouviez dans sys.argv plus tard.


Le deuxième python est un nom pour python, il peut s'agir de n'importe quelle chaîne, mais il doit être là.

Voir le deuxième paragraphe de http://docs.python.org/3/library/os.html?highlight=os.exec#process-management :

Les différentes fonctions exec* prennent une liste d'arguments pour le nouveau programme chargé dans le processus. Dans chaque cas, le premier de ces arguments est transmis au nouveau programme sous son propre nom plutôt que sous la forme d'un argument qu'un utilisateur peut avoir tapé sur une ligne de commande. Pour le programmeur C, il s'agit de la valeur argv[0] transmise à la fonction main() d'un programme. Par exemple, os.execv('/bin/echo', ['foo', 'bar']) n'imprimera que bar sur la sortie standard ; foo semblera être ignoré.