Lorsque vous invoquez python
seul pour l'obtenir en mode interactif, il n'y a pas d'arguments transmis. Par conséquent, argv
est vide.
Je suis en cours d'exécution sur Ubuntu
, mais il est le même concept général Windows
:
:~ $ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import argv
>>> print argv
>>> ['']
Powershell
et Python
sont deux choses distinctes, chacune avec leurs propres concepts des arguments qui leur sont passés. Tout comme un script bash
a le concept d'arguments transmis, il en va de même pour Powershell
, bien qu'ils soient gérés différemment. Cependant, aucun n'est directement connecté à argv
de Python.
En général, on peut utiliser environment variable
s pour passer les choses et-vient entre Python et le shell (vous pouvez définir environment variable
s à l'intérieur de Python
qui pourraient être lus dans la coquille ou vice versa, mais dans les deux cas, ces serait différent de argv
, qui est spécifiquement les arguments transmis à l'exécutable python
). Ou on pourrait utiliser les variables d'environnement du shell pour déterminer quels arguments devraient être passés à python
, déterminant ainsi ce que sera argv
.
Voir ce lien pour plus de détails: https://docs.python.org/2/library/sys.html#sys.argv
Modifier en réponse au commentaire de OP:
Vous ne pouvez pas déclarer argv
, en tant que tel. C'est représentatif de la façon dont l'interprète a été invoqué, et en mode interactif, par définition, il n'a aucun argument.
Pour votre exemple spécifique, cela a à voir avec la façon dont tuple
s sont déballés dans Python
et l'état actuel de argv
, qui est une chaîne vide.
:~ $ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import argv
>>> firstArgument=argv
>>> print firstArgument
['']
>>> firstArgument, secondArgument=argv
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
Depuis argv
n'a qu'un seul élément, vous ne pouvez pas l'attribuer à deux variables.
Vous pouvez, par exemple, faites ceci:
>>> firstArgument, secondArgument=argv,1
>>> print secondArgument
1
Maintenant, il y a en fait deux valeurs - le tuple ('', 1), et il peut être décompressé dans les deux variables différentes .
Ah ok, vous venez de répondre à ma question. Pourquoi ai-je une erreur si j'essaie de déclarer plus d'un argv en mode interactif? Par exemple: >> firstArgument = argv (fonctionne bien) contre >> firstArgument, secondArgument = argv (erreur!). Désolé, je ne me suis pas encore habitué à la mise en forme de StackOverflow. De plus, existe-t-il un moyen d'initialiser ou de donner des valeurs à ces arguments? –
va éditer la réponse w/add'l info – khampson
Ajout d'informations de suivi basées sur votre commentaire. Veuillez accepter ma réponse, car elle a répondu à votre question (voir http://stackoverflow.com/tour pour plus d'informations). – khampson