Python >> Tutoriel Python >  >> Python Tag >> exec()

Comment exécuter un fichier avec des arguments en Python ?

Dans cet article, vous apprendrez trois façons d'exécuter des programmes Python et non-Python à partir d'un programme Python.

Méthode 1 :Exécuter un fichier avec un sous-processus

Défi :En Python, vous devez parfois exécuter un autre fichier, script ou programme à partir de votre propre programme Python et fournir des arguments.

Il existe plusieurs façons de procéder, mais je trouve que la plus simple consiste à utiliser l'importation de "sous-processus".

import subprocess
subprocess.run(['git', 'commit', '-m', 'Testing commits with Automation!'])

Décomposons exactement ce que cela signifie. Le subprocess.run() La fonction réside dans le module subprocess de la bibliothèque Python standard. Il n'est pas chargé par Python par défaut, mais il s'agit d'une fonctionnalité supplémentaire qui doit être importée. Une fois ce code importé dans votre script Python, il peut être appelé. Ce module remplace les anciennes fonctions comme os.spawn() et os.system() .

Au minimum, le subprocess.run() La fonction doit recevoir une liste qui inclut le fichier ou la commande à exécuter avec chaque argument en tant qu'élément distinct de la liste. Dans ce cas, la commande que nous exécutons est git commit -m 'Testing commits with Automation!' , et il s'exécutera en tant que sous-processus de l'interpréteur Python.

Parfois, les arguments de la ligne de commande peuvent être complexes et établir la liste des arguments n'est pas facile. Je recommande de jouer avec le shlex bibliothèque dans une borne interactive jusqu'à ce que vous maîtrisiez le tout. Vous n'en aurez pas besoin dans votre code de production, mais cela pourrait aider à clarifier le concept.

>>> import shlex
>>> shlex.split("git commit -m 'Testing commits with Automation!'")
['git', 'commit', '-m', 'Testing commits with Automation!']

“`

Si après avoir suivi ces étapes, vous avez toujours du mal à exécuter votre commande, considérez ce qui suit :utilisez le chemin complet du fichier à exécuter (par exemple, /home/user/script.py ou C:\Program Files\Python 3.9\python.exe ), en vérifiant les autorisations du fichier que vous tentez d'exécuter pour vous assurer qu'il est en fait exécutable, en vérifiant les fautes de frappe ou la sensibilité à la casse.

En résumé, les étapes pour exécuter un fichier avec des arguments à partir d'un script Python sont :

  1. Importer le subprocess modules
  2. Préparez vos arguments de ligne de commande sous forme de liste
    1. Le shlex module peut aider à analyser des lignes de commande complexes
  3. Faire un appel à la fonction subprocess.run() et passez-lui la liste d'arguments en paramètre

Il existe de nombreuses fonctionnalités utiles dans la bibliothèque de sous-processus, je vous recommande donc de consulter la documentation officielle. Un cas d'utilisation supplémentaire courant serait de capturer les données renvoyées à stdout . Heureusement, Python rend cela facile. Il suffit d'un paramètre supplémentaire, capture_output=True , au subprocess.run() appel de fonction inclus après la liste des arguments. Comme ça –

output = subprocess.run(["ls", "-l"], capture_output=True)
print(output.stdout)

Dans l'exemple ci-dessus, le listing du répertoire généré par le ls -l La commande stockera le texte renvoyé par stdout dans output.stdout . La commande d'impression affichera cette sortie à l'écran. La capture de la sortie des sous-processus exécutés vous permettra d'intégrer ces commentaires dans votre programme. Par exemple, si votre code crée un répertoire pour un utilisateur, vous pouvez maintenant vérifier si ce répertoire existe déjà avant d'essayer de le créer à nouveau !

Maintenant que nous avons expliqué comment exécuter un fichier avec des arguments, comment pouvons-nous créer nous-mêmes un script Python qui gère les arguments de la ligne de commande ?

Méthode 2 :Exécuter un fichier Python avec des arguments à l'aide de sys.argv

Afin de passer des arguments à votre script Python, vous devrez importer le sys module. Une fois ce module importé dans votre code, à l'exécution sys.argv existera, contenant une liste de tous les arguments passés à votre script.

Considérez le script suivant :

import sys

print(len(sys.argv))
print(sys.argv)

Si nous exécutons ce script à partir d'une invite de commande avec python3 args.py arg1 arg2 , il retournera :

3
['args.py', 'arg1', 'arg2']

Si ce script est déjà exécutable (et nous incluons le #! /usr/bin/python3 en haut), nous pourrions l'exécuter comme ceci ./args.py arg1 arg2 et il retournera :

3
[‘./args.py’, ‘arg1’, ‘arg2’]

Notez que même si seuls deux arguments ont été fournis au script, trois arguments sont répertoriés. L'élément 0 de la liste est toujours le nom du script lui-même. Si l'utilisateur renomme le script sur son endpoint, sys.argv[0] reflétera ce nom.

Souvent, lors de l'écriture d'un programme en Python, il est important de savoir combien d'arguments sont passés au script à des fins de vérification des erreurs. Si des paramètres insuffisants sont fournis par l'utilisateur, un message d'erreur utile donnant des instructions d'utilisation peut être fourni.

Considérez le code suivant :

import sys

if len(sys.argv) == 1:
    	print("Usage: %s -f" % sys.argv[0])
    	exit()

for argument in sys.argv:
    	if argument == "-f":
            	print("Hello Finxter!")

Ce bloc de code vérifiera si au moins un argument est passé au programme, et si ce n'est pas le cas, il affichera un message d'erreur utile. Ensuite, il parcourra la liste des arguments en vérifiant “-f” . Si cet argument a été passé, le programme imprimera notre “Hello Finxter!” message !

C'est la façon grossière et rudimentaire de traiter les arguments de la ligne de commande. En résumé :

  1. Importer le sys modules
  2. Accéder aux arguments à l'index défini, par exemple sys.argv[1]
    1. Une boucle for peut vous aider si vos utilisateurs placent des arguments dans le désordre

Une autre chose à considérer est que Python a également un module nommé argparse qui nous permet de faire plus avec les arguments de ligne de commande d'une manière plus lisible, ainsi que de gérer facilement les paramètres optionnels et positionnels.

Maintenant que vous savez comment incorporer des arguments de ligne de commande dans votre script, comment les utiliser si vous utilisez un IDE comme PyCharm ?

Méthode 3 :Exécuter un fichier Python avec des arguments dans PyCharm

Dans l'environnement de développement PyCharm, la barre d'outils supérieure comprendra un onglet Exécuter. Cliquez dessus et choisissez "Modifier les configurations". Une nouvelle fenêtre apparaîtra qui vous permettra d'entrer les paramètres nécessaires pour exécuter votre script.

Cela fonctionne de la même manière que pour passer des arguments via la ligne de commande.

Merci d'avoir lu! Assurez-vous de consulter le reste de nos tutoriels sur https://blog.finxter.com/.