web-dev-qa-db-fra.com

Comment accéder aux arguments de ligne de commande en Python?

J'utilise python pour créer les paramètres de mon projet, mais j'ai besoin d'aide pour obtenir les arguments de ligne de commande.

J'ai essayé ceci sur le terminal:

$python myfile.py var1 var2 var3

Dans mon fichier Python, je souhaite utiliser toutes les variables entrées.

309
ParisNakitaKejser

Le didacticiel Python l'explique :

import sys

print(sys.argv)

Plus spécifiquement, si vous exécutez python example.py one two three:

>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']
429
SilentGhost
import sys

sys.argv[1:]

vous donnera une liste d'arguments (n'incluant pas le nom du fichier python)

95
Ryan Mentley

Je recommande fortement argparse qui est fourni avec Python 2.7 et versions ultérieures.

Le module argparse réduit le code de la plaque de la chaudière et le rend plus robuste, car il gère tous les cas d'utilisation standard (y compris les sous-commandes), génère l'aide et l'utilisation à votre place, vérifie et désinfecte les entrées de l'utilisateur. vous utilisez l'approche sys.argv. Et c'est gratuit (intégré).

Voici un petit exemple:

import argparse

parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)

et la sortie pour python prog.py -h

usage: simple_example [-h] counter

positional arguments:
  counter     counter will be increased by 1 and printed.

optional arguments:
  -h, --help  show this help message and exit

et pour python prog.py 1 comme on peut s'y attendre:

2
73
Michael Dorner

Code Python:

import sys

# main
param_1= sys.argv[1] 
param_2= sys.argv[2] 
param_3= sys.argv[3]  
print 'Params=', param_1, param_2, param_3

Invocation:

$python myfile.py var1 var2 var3

Sortie:

Params= var1 var2 var3 
47
Charles P.

Vous pouvez utiliser sys.argv pour obtenir les arguments sous forme de liste.

Si vous devez accéder à des éléments individuels, vous pouvez utiliser

sys.argv[i]  

i est un index, 0 vous donnera le nom de fichier python en cours d'exécution. Tous les index suivants sont les arguments passés.

22
allsyed

Si vous l'appelez comme ceci: $ python myfile.py var1 var2 var3

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

Semblable aux tableaux, vous avez aussi sys.argv[0] qui est toujours le répertoire de travail actuel.

6
lvadim01

Quelques choses supplémentaires que je peux penser.

Comme @allsyed a déclaré que sys.argv fournit une liste de composants (y compris le nom du programme), donc si vous souhaitez connaître le nombre d'éléments passés via la ligne de commande, vous pouvez utiliser len () pour le déterminer. Sur cette base, vous pouvez concevoir des messages d'erreur/d'exception si l'utilisateur n'a pas transmis un nombre spécifique de paramètres.

De plus, si vous cherchez une meilleure façon de gérer les arguments en ligne de commande, je vous suggérerais de regarder https://docs.python.org/2/howto/argparse.html

5
Rohan Sadale