sys.argv[1] sens dans le script
Je suis actuellement enseignante moi-même Python et me demandais juste (En référence à mon exemple ci-dessous) en termes simples ce que le sys.argv[1]
représente. Est-il tout simplement demander un input?
#!/usr/bin/python3.1
# import modules used here -- sys is a very standard one
import sys
# Gather our code in a main() function
def main():
print ('Hello there', sys.argv[1])
# Command line args are in sys.argv[1], sys.argv[2] ..
# sys.argv[0] is the script name itself and can be ignored
# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
main()
Vous devez vous connecter pour publier un commentaire.
Je tiens à noter que les réponses précédentes fait de nombreuses hypothèses sur la connaissance de l'utilisateur. Cette réponse tente de répondre à la question, à un niveau tutoriel.
Pour chaque invocation de Python,
sys.argv
est automatiquement une liste de chaînes de caractères représentant les arguments (comme séparés par des espaces) sur la ligne de commande. Le nom vient de la La programmation en C de la convention de dans lequel argv et argc représentent les arguments de ligne de commande.Vous aurez envie d'en apprendre plus sur les listes et les chaînes que vous êtes familiarisé avec Python, mais en attendant, voici quelques petites choses à savoir.
Vous suffit de créer un script qui imprime les arguments qu'ils sont représentés. Il imprime aussi le nombre d'arguments, à l'aide de la
len
fonction sur la liste.Le script nécessite Python 2.6 ou version ultérieure. Si vous appelez ce script
print_args.py
, vous pouvez l'appeler avec des arguments différents pour voir ce qui se passe.Comme vous pouvez le voir, les arguments de ligne de commande comprennent le nom du script, mais pas le nom de l'interprète. En ce sens, Python traite le script comme l'exécutable. Si vous avez besoin de connaître le nom de l'exécutable (python dans ce cas), vous pouvez utiliser
sys.executable
.Vous pouvez le voir dans les exemples qu'il est possible de recevoir des arguments qui contiennent des espaces, si l'utilisateur a invoqué le script avec des arguments entourées d'apostrophes, de sorte que ce que vous obtenez est la liste des arguments fournis par l'utilisateur.
Maintenant dans votre code Python, vous pouvez utiliser cette liste de chaînes de caractères en entrée de votre programme. Comme les listes sont indexés par des entiers de base zéro, vous pouvez obtenir les éléments individuels à l'aide de la liste[0] syntaxe. Par exemple, pour obtenir le nom du script:
Bien qu'intéressantes, vous aurez rarement besoin de connaître votre nom de script. Pour obtenir le premier argument après le script pour un nom de fichier, vous pouvez effectuer les opérations suivantes:
C'est un très commun, mais notez qu'il échouera avec une IndexError si aucun argument n'a été fourni.
Aussi, Python vous permet de référencer une tranche de une liste, de sorte à obtenir une autre liste de juste fournies par l'utilisateur arguments (mais sans le nom du script), vous pouvez le faire
En outre, Python permet d'assigner une séquence d'éléments (y compris des listes de noms de variables. Donc, si vous vous attendez à l'utilisateur de toujours fournir deux arguments, vous pouvez affecter ces arguments (comme des chaînes de caractères) de deux variables:
Donc, pour répondre à votre question spécifique,
sys.argv[1]
représente le premier argument de ligne de commande (en tant questring
) fourni pour le script en question. Il ne vous demandera pas d'entrée, mais il échouera avec une IndexError si aucun argument n'est fourni sur la ligne de commande suivant le nom du script.sys.argv
, je me demande ce que la lignefrom __future__ import print_function
n'. Est-il quelque chose que je dois ajouter, si je suis PAS en cours d'exécution sur Python 3, mais Python 2? @Jason R. Combessys.argv **is** automatically a list of strings
. Voulez-vous dire "donne" ou "retour"?argv
attribut de lasys
module est une référence à un objet de la liste contenant les chaînes de caractères des arguments. Pour utilisergives
oureturns
suggère un appel de fonction ou d'un générateur ou d'une autre construction.references
ourepresents
peut-être des termes plus précis, maisis
est assez proche.main
par l'importation du module (permet de dire que le nom du module estmoduleA.py
) et appeler la fonction comme dansimport moduleA; moduleA.main()
. Dans ce cas, il n'y a pas d'arguments de ligne de commande.. donc estsys.argv[0]
toujours censé représenter lefilename
ie. il devrait imprimermoduleA.py
?sys.argv[0]
. Même à l'intérieur d'un virtualenv, appelantipython
ouenv\bin\ipython
,python
, puis en exécutant quelque chose commeimport moduleA; moduleA.main()
conduire à de complètement différent affichage des trésors... Si je ne suis pas candidatpython filenameA.py
, comment estsys.argv[0]
, toujours pas sûr de savoir commentsys.argv[0]
est déterminée..sys.argv[1] contient le premier ligne de commande argument passés au script.
Par exemple, si votre script est nommé
hello.py
et vous question:ou:
Votre script d'impression:
sys.argv
est une liste de.Cette liste est créée par votre ligne de commande, c'est une liste de vos arguments de ligne de commande.
Par exemple:
dans votre ligne de commande, vous saisissez quelque chose comme cela,
sys.argv
deviendra une liste ['file.py', 'quelque chose']Dans ce cas
sys.argv[1] = 'something'
Juste en ajoutant à Frédéric de réponse, par exemple, si vous appelez votre script comme suit:
./myscript.py foo bar
sys.argv[0]
serait "./myscript.py"sys.argv[1]
serait "foo" etsys.argv[2]
serait "bar" ... et ainsi de suite.Dans votre code d'exemple, si vous appelez le script comme suit
./myscript.py foo
, le script de sortie sera "Bonjour toto".L'ajout d'un peu plus de points de Jason Réponse :
Pour prendre de l'utilisateur tous les arguments fournis :
user_args = sys.argv[1:]
Considérer le sys.argv comme une liste de chaînes de caractères comme des (mentionné par Jason). Donc, toute la liste des manipulations va s'appliquer ici. Cette opération est appelée "Liste de Découpage". Pour plus d'informations, visitez ici.
La syntaxe est la suivante : liste[début:fin:step]. Si vous omettez de commencer, il sera par défaut à 0, et si vous omettez fin, il sera par défaut à la longueur de la liste.
Supposons que vous voulez seulement de prendre en compte tous les arguments après le 3e argument, alors :
Supposons que vous voulez seulement les deux premiers arguments, alors :
Supposons que vous voulez des arguments de 2 à 4 :
Supposons que vous voulez le dernier argument (le dernier argument est toujours -1, de sorte que ce qui se passe ici, c'est nous commencer le compte à partir de l'arrière. Donc, commencer à se dernière, pas de fin, pas d'étape) :
Supposons que vous voulez que le deuxième dernier argument :
Supposons que vous voulez que les deux derniers arguments :
Supposons que vous voulez que les deux derniers arguments. Ici, commencer est de -2, qui est avant-dernier élément, puis à la fin (indiqué par ":") :
Supposons que vous voulez le tout, sauf les deux derniers arguments. Ici, de départ est 0 (par défaut), et la fin est deuxième du dernier élément :
Supposons que vous voulez les arguments dans l'ordre inverse :
Espère que cette aide.
sys.argv est une liste contenant le chemin du script et les arguments de ligne de commande; c'est à dire sys.argv[0] est le chemin d'accès du script que vous êtes en cours d'exécution et tous les membres suivants sont des arguments.
Pour passer des arguments à votre script python
lors de l'exécution d'un script via la ligne de commande
ici,
nom du script - create_thumbnail.py,
argument 1 - test1.jpg,
argument 2 - test2.jpg
Dans le create_thumbnail.py script que j'utilise
qui me donne la liste des arguments passés en ligne de commande
['test1.jpg', 'test2.jpg']
sys.argv
est un attribut de lasys
module. Il affirme que les arguments passés dans le fichier dans la ligne de commande.sys.argv[0]
attrape le répertoire où se trouve le fichier.sys.argv[1]
retourne le premier argument passé dans la ligne de commande. Pensez comme nous avons un example.py fichier.example.py
Maintenant, ici, dans l'invite de commande lorsque nous faisons cela:
Qu'il va jeter un indice d'erreur à la ligne 2. Cause il n'est pas un argument encore passé. Vous pouvez voir la longueur de la arguments qui lui sont transmises par l'utilisateur à l'aide de
if len(sys.argv) >= 1: # Code
.Si nous jouons à l'example.py avec le passage d'un argument
Il imprime:
Parce que c'était la première arguement! Disons que nous avons fait un fichier exécutable à l'aide PyInstaller. On pourrait faire ceci:
Il imprime:
Il est vraiment utile lorsque vous faites une commande dans le terminal. Vérifiez d'abord la longueur des arguments. Si aucun argument n'passé, faire le texte d'aide.
sys .argv affiche la ligne de commande arguments passés lors de l'exécution d'un script ou vous pouvez dire sys.argv va stocker les arguments de ligne de commande passé en python lors de l'exécution à partir de la borne.
Essaie juste de faire ceci:
argv contient tous les arguments passés à une liste python. Le ci-dessus permettra d'imprimer tous les arguments passés exécutez le script.
Maintenant, essayez cette exécution de votre filename.py comme ceci:
cela permettra d'imprimer 3 arguments dans une liste.
De même, argvUn est le premier argument passé, dans ce cas, 'exemple'
Une question similaire a été posée déjà ici btw. Espérons que cette aide!