J'utilise python pour créer la configuration des paramètres de mon projet, mais j'ai besoin d'aide pour obtenir les arguments de la ligne de commande.
J'ai essayé ceci sur le terminal:
$python myfile.py var1 var2 var3
Dans mon fichier Python, je veux utiliser toutes les variables qui sont entrées.
python
command-line
ParisNakitaKejser
la source
la source
Réponses:
Le didacticiel Python l'explique :
Plus précisément, si vous exécutez
python example.py one two three
:la source
vous donnera une liste d'arguments (n'incluant pas le nom du fichier python)
la source
[1:]
dire?[1:]
vers le haut car le premier argument desys.argv
est par défaut le nom du fichier python que vous exécutez par exempletestrun.py
.Je recommande fortement
argparse
ce qui vient avec Python 2.7 et versions ultérieures.Le
argparse
module réduit le code de la plaque de la chaudière et rend votre code plus robuste, car le module gère tous les cas d'utilisation standard (y compris les sous-commandes), génère l'aide et l'utilisation pour vous, vérifie et désinfecte l'entrée utilisateur - toutes les choses dont vous devez vous soucier lorsque vous utilisent l'sys.argv
approche. Et c'est gratuit (intégré).Voici un petit exemple:
et la sortie pour
python prog.py -h
et
python prog.py 1
comme vous vous en doutez:la source
parser.add_argument('var3', nargs='?', type=int, default=3)
var3 est un paramètre facultatif, si vous ne spécifiez pas de valeur dans la ligne de commande, vous pouvez accéder à var3 dans votre code, valeur par défaut pour var3 = 3Code Python:
Invocation:
Production:
la source
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
où
i
est index,0
vous donnera le nom de fichier python en cours d'exécution. Tout index après cela est les arguments passés.la source
Si vous l'appelez comme ceci:
$ python myfile.py var1 var2 var3
Semblable aux tableaux que vous avez également,
sys.argv[0]
qui est toujours le répertoire de travail actuel.la source
sys.argv[0]
n'est pas le répertoire de travail actuel. Il s'agit du nom du fichier en cours d'exécution.Quelques choses supplémentaires auxquelles je peux penser.
Comme @allsyed l'a dit, sys.argv donne une liste de composants (y compris le nom du programme), donc si vous voulez connaître le nombre d'éléments passés par la ligne de commande, vous pouvez utiliser len () pour le déterminer. Sur cette base, vous pouvez concevoir des messages d'exception / d'erreur si l'utilisateur n'a pas transmis un nombre spécifique de paramètres.
Aussi, si vous cherchez une meilleure façon de gérer les arguments de la ligne de commande, je vous suggère de consulter https://docs.python.org/2/howto/argparse.html
la source