Me gustaría señalar que las respuestas anteriores hicieron muchas suposiciones sobre el conocimiento del usuario. Esta respuesta intenta responder a la pregunta a un nivel más tutorial.
Para 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 del C programming convention en el que argv y argc representan los argumentos de la línea de comando.
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.
Puede simplemente crear un script que imprima los argumentos tal como están representados. También imprime la cantidad de argumentos, usando la función len
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 llama 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 se puede ver, los argumentos de 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, de modo que lo que obtiene es la lista de argumentos proporcionada por el usuario.
Ahora en su código de Python, puede usar esta lista de cadenas como entrada para su programa. Como las listas están indexadas por enteros basados en cero, puede obtener los elementos individuales usando la sintaxis de la lista [0]. Por ejemplo, para obtener el nombre del script:
script_name = sys.argv[0] # this will always work.
Aunque eso es interesante saber, que rara vez se necesita saber su nombre del script. Para obtener el primer argumento después de que el guión de un nombre de archivo, se puede hacer lo siguiente:
filename = sys.argv[1]
Este es un uso muy común, pero tenga en cuenta que se producirá un error con un IndexError si hay argumento fue suministrado.
Además, Python permite hacer referencia a una porción de una lista, así que para obtener otra lista de sólo los argumentos proporcionados por el usuario (pero sin el nombre del script), que 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. Así que si usted espera que el usuario suministre siempre dos argumentos, puede asignar esos argumentos (cadenas) a dos variables:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
Así, en respuesta definitiva a su problema, sys.argv[1]
representa el primer argumento de línea de comandos (como string
) suministrado al script en cuestión. No solicitará la entrada, pero fallará con un IndexError si no se proporcionan argumentos en la línea de comandos siguiendo el nombre del script.
Esto, no es parte de la pregunta, y es muy antiguo, pero el módulo [argparse] (https://docs.python.org/2/library/argparse.html#module-argparse), probablemente sea mejor por lo que estás tratando de hacer, de acuerdo con [esto] (http://stackoverflow.com/q/1009860/2886003) – Llopis