0
votes

Obtenez la commande qui a exécuté le script Python à l'intérieur du script lui-même

Je veux que la commande a été utilisée pour appeler le script Python soit disponible dans le script lui-même.

J'aime: xxx

est-il possible dans foo.py pour obtenir ces commandes entière.


3 commentaires

Utilisez le module argparse . 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.


3 Réponses :


1
votes

La chose la plus proche que je puisse penser est la suivante: xxx

exemple de sortie (sous Windows): xxx


0 commentaires

2
votes

Utilisez sys.executable code> et sys.argv code>: xxx pré>

Ce qui précède doit fonctionner avec Python 2 et Python 3 (ci-dessous est des macos): p> xxx pré>

modifier em> p>

Si cela ne suffit pas, vous pouvez essayer le Psutil Bibliothèque (Pip Installez Psutil): P>

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


3 commentaires

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 qui peut aider.


psutil.process (). CMDLINE () résout le problème. Merci.



0
votes

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 sys.argv code> ne vous donne pas, cependant, le niveau du système d'exploitation Ligne de commande. P>

Vous pouvez obtenir l'exécutable Python avec sys.executable code>, mais ni ceci ni sys.argv code> vous donnerait la ligne de commande complète: P>

dise que c'est foo.py code>: p> xxx pré>

alors: p> xxx pré>

Comme vous pouvez le constater, le drapeau -o code> n'est pas présent là-bas. p>

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>

$ python -O foo.py a b c
['python', '-O', 'foo.py', 'a', 'b', 'c', '']


0 commentaires