Je veux que la commande a été utilisée pour appeler le script Python soit disponible dans le script lui-même.
J'aime: p> est-il possible dans foo.py pour obtenir ces commandes entière. p> p>
3 Réponses :
La chose la plus proche que je puisse penser est la suivante: exemple de sortie (sous Windows): p>
Utilisez Ce qui précède doit fonctionner avec Python 2 et Python 3 (ci-dessous est des macos): p> modifier em> p> Si cela ne suffit pas, vous pouvez essayer le Psutil Bibliothèque (Pip Installez Psutil): P> sys.executable code> et sys.argv code>: C:\Users\b.howes>python2 blah.py -a 1 -b 2 3 4
['python2', 'blah.py', '-a', '1', '-b', '2', '3', '4']
C:\Python27\python2.exe
C:\Users\b.howes>python blah.py -a 1 -b 2 3 4
['python', 'blah.py', '-a', '1', '-b', '2', '3', '4']
C:\Users\b.howes\AppData\Local\Programs\Python\Python38\python.exe
Sys.executable donnera sûrement le chemin du python utilisé et on peut peut-être extraire Python2 ou Python3 de celui-ci, mais cela ne fonctionnera pas sur toutes les machines. Comme sur Windows, je vais obtenir python.exe ou quelque chose de différent sur un autre système d'exploitation. Je veux simplement ce que l'utilisateur utilisé dans la commande. (Python / Python2 / Python3). Une approche que je peux penser consiste à obtenir sys.version_info [0], puis en python -version dans la sous-processus, puis comparez ces deux pour savoir quel utilisateur utilisé. Y a-t-il un moyen plus simple de faire cela?
J'ai mis à jour ma réponse avec un pointeur sur psutil code> qui peut aider.
psutil.process (). CMDLINE () résout le problème. Merci.
Dans les environnements UNIX, vous n'avez pas accès à la ligne de commande elle-même - ce n'est pas spécifique à Python. Cependant, une coquille ou un autre programme bien élevé exécutant un autre programme placera le nom ou le chemin exécutable dans le premier argument.
Python's Vous pouvez obtenir l'exécutable Python avec dise que c'est alors: p> Comme vous pouvez le constater, le drapeau Si vous en avez vraiment besoin, le moyen de l'obtenir est probablement dépendant du système d'exploitation (i Je ne sais pas si Python vous donne accès à ces arguments de ligne de commande "de bas niveau"). p> Si vous êtes sous Linux, vous pouvez le faire: P> sys.argv code> ne vous donne pas, cependant, le niveau du système d'exploitation Ligne de commande. P> sys.executable code>, mais ni ceci ni sys.argv code> vous donnerait la ligne de commande complète: P> foo.py code>: p> -o code> n'est pas présent là-bas. p> $ python -O foo.py a b c
['python', '-O', 'foo.py', 'a', 'b', 'c', '']
Utilisez le module
argparse code>. lienÉventuellement un duplicatin de Stackoverflow.com/Questtions/4033723/...
Argparse me donnera les arguments passés mais pas la version python / option comme Python ou Python3. Je peux utiliser sys.version_info pour obtenir la version et supposer Python3 quand il n'est pas <3 mais qui ne fonctionnera pas sur la machine avec Python version 3 par défaut. Là, Python sera la commande appropriée.