Si te encuentras con algo que no entiendes puedes dejarlo en la sección de comentarios y te ayudaremos rápidamente.
Solución:
Me gustaría señalar que las respuestas anteriores hicieron muchas suposiciones sobre el conocimiento del usuario. Esta respuesta intenta responder la pregunta a un nivel más tutorial.
Por cada invocación de Python, sys.argv
es automáticamente una lista de cadenas que representan los argumentos (separados por espacios) en la línea de comandos. El nombre proviene de la convención de programación C en la que argv y argc representan los argumentos de la línea de comandos.
Querrá aprender más sobre listas y cadenas a medida que se familiarice con Python, pero mientras tanto, aquí hay algunas cosas que debe saber.
Simplemente puede crear un script que imprima los argumentos tal como están representados. También imprime el número de argumentos, usando el len
función en la lista.
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
El script requiere Python 2.6 o posterior. Si llamas a este script print_args.py
puede invocarlo con diferentes argumentos para ver qué sucede.
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
Como puede ver, los argumentos de la línea de comandos incluyen el nombre del script pero no el nombre del intérprete. En este sentido, Python trata el script como el ejecutable. Si necesita saber el nombre del ejecutable (python en este caso), puede usar sys.executable
.
Puede ver en los ejemplos que es posible recibir argumentos que contienen espacios si el usuario invocó el script con argumentos encapsulados entre comillas, por lo que lo que obtiene es la lista de argumentos proporcionada por el usuario.
Ahora, en su código Python, puede usar esta lista de cadenas como entrada para su programa. Dado que las listas están indexadas por números enteros basados en cero, puede obtener los elementos individuales utilizando la lista[0] sintaxis. Por ejemplo, para obtener el nombre del script:
script_name = sys.argv[0] # this will always work.
Aunque es interesante, rara vez necesita saber el nombre de su script. Para obtener el primer argumento después de la secuencia de comandos para un nombre de archivo, puede hacer lo siguiente:
filename = sys.argv[1]
Este es un uso muy común, pero tenga en cuenta que fallará con un IndexError si no se proporcionó ningún argumento.
Además, Python le permite hacer referencia a una parte de una lista, por lo que para obtener otra lista de solo los argumentos proporcionados por el usuario (pero sin el nombre del script), puede hacer
user_args = sys.argv[1:] # get everything after the script name
Además, Python le permite asignar una secuencia de elementos (incluidas listas) a nombres de variables. Entonces, si espera que el usuario proporcione siempre dos argumentos, puede asignar esos argumentos (como cadenas) a dos variables:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
Entonces, para responder a su pregunta específica, sys.argv[1]
representa el primer argumento de la línea de comandos (como un string
) proporcionado al script en cuestión. No solicitará entrada, pero fallará con un IndexError si no se proporcionan argumentos en la línea de comandos después del nombre del script.
sys.argv[1] contiene el primer argumento de la línea de comando pasado a su secuencia de comandos.
Por ejemplo, si su script se llama hello.py
y emites:
$ python3.1 hello.py foo
o:
$ chmod +x hello.py # make script executable
$ ./hello.py foo
Su script imprimirá:
Hello there foo
sys.argv
es una lista
Esta lista es creada por su línea de comando, es una lista de sus argumentos de línea de comando.
Por ejemplo:
en su línea de comando ingresa algo como esto,
python3.2 file.py something
sys.argv
se convertirá en una lista [‘file.py’, ‘something’]
En este caso sys.argv[1] = 'something'
Si aceptas, eres capaz de dejar una noticia acerca de qué te ha impresionado de esta crónica.