sys.argv significado en script

Actualmente me estoy enseñando Python y me estaba preguntando (en referencia a mi ejemplo a continuación) en términos simplificados qué representa sys.argv [1]. ¿Es simplemente pedir una entrada?

#!/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() 

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.

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 de la convención de progtwigción C en la 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.

Simplemente puede crear un script que imprima los argumentos como se representan. También imprime el número de argumentos, utilizando 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 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ó la secuencia de comandos con argumentos encapsulados entre comillas, por lo que lo que obtiene es la lista de argumentos tal como la proporciona el usuario.

Ahora en su código Python, puede usar esta lista de cadenas como entrada para su progtwig. Dado que las listas están indexadas por enteros basados ​​en cero, puede obtener los elementos individuales utilizando la syntax de la lista [0]. 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 porción de una lista, así que para obtener otra lista de los argumentos proporcionados por el usuario (pero sin el nombre del script), puede hacerlo

 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 siempre suministre 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 

Por lo tanto, para responder a su pregunta específica, sys.argv[1] representa el primer argumento de línea de comandos (como una string ) suministrado 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 línea de comando pasado a su script.

Por ejemplo, si su script se llama hello.py y usted emite:

  $ python3.1 hello.py foo 

o:

 $ chmod +x hello.py # make script executable $ ./hello.py foo 

Su guión se imprimirá:

  Hola ahi 

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 tu línea de comando ingresas algo como esto,

 python3.2 file.py something 

sys.argv se convertirá en una lista [‘file.py’, ‘algo’]

En este caso sys.argv[1] = 'something'

Solo agregando a la respuesta de Frederic, por ejemplo, si llama a su script de la siguiente manera:

./myscript.py foo bar

sys.argv[0] sería “./myscript.py” sys.argv[1] sería “foo” y sys.argv[2] sería “barra” … y así sucesivamente.

En su código de ejemplo, si llama a la secuencia de comandos de la siguiente manera ./myscript.py foo , la salida de la secuencia de comandos será “Hello there foo”.

Añadiendo algunos puntos más a la respuesta de Jason:

Para tomar todos los argumentos proporcionados por el usuario: user_args = sys.argv[1:]

Considere el sys.argv como una lista de cadenas como (mencionado por Jason). Así que todas las manipulaciones de la lista se aplicarán aquí. Esto se llama “List Slicing”. Para más información visita aquí .

La syntax es así: list [inicio: final: paso]. Si omite el inicio, el valor predeterminado será 0, y si omite el final, el valor predeterminado será la longitud de la lista.

Supongamos que solo desea tomar todos los argumentos después del 3er argumento, entonces:

 user_args = sys.argv[3:] 

Supongamos que solo desea los dos primeros argumentos, entonces:

 user_args = sys.argv[0:2] or user_args = sys.argv[:2] 

Supongamos que quieres los argumentos 2 a 4:

 user_args = sys.argv[2:4] 

Supongamos que desea el último argumento (el último argumento siempre es -1, entonces lo que está sucediendo aquí es que comenzamos a contar desde atrás. Así que el inicio es el último, no hay final, no hay paso):

 user_args = sys.argv[-1] 

Supongamos que quieres el segundo último argumento:

 user_args = sys.argv[-2] 

Supongamos que quieres los dos últimos argumentos:

 user_args = sys.argv[-2:] 

Supongamos que quieres los dos últimos argumentos. Aquí, el inicio es -2, que es el segundo último elemento y luego hasta el final (indicado por “:”):

 user_args = sys.argv[-2:] 

Supongamos que quieres el todo excepto los dos últimos argumentos. Aquí, el inicio es 0 (de forma predeterminada), y el final es el segundo último elemento:

 user_args = sys.argv[:-2] 

Supongamos que desea los argumentos en orden inverso:

 user_args = sys.argv[::-1] 

Espero que esto ayude.

sys.argv es una lista que contiene la ruta del script y los argumentos de la línea de comandos; es decir, sys.argv [0] es la ruta del script que está ejecutando y todos los siguientes miembros son argumentos.

Para pasar argumentos a su script de Python mientras ejecuta un script a través de la línea de comandos

python create_thumbnail.py test1.jpg test2.jpg

aquí, nombre del script – create_thumbnail.py, argumento 1 – test1.jpg, argumento 2 – test2.jpg

Con el script create_thumbnail.py que uso

 sys.argv[1:] 

que me da la lista de argumentos que pasé en la línea de comando como [‘test1.jpg’, ‘test2.jpg’]

sys .argv mostrará los argumentos de la línea de comandos que se aprobaron al ejecutar un script o puede decir que sys.argv almacenará los argumentos de la línea de comandos que se pasaron en Python mientras se ejecutan desde la terminal.

Solo prueba esto:

 import sys print sys.argv 

argv almacena todos los argumentos pasados ​​en una lista de python. Lo anterior imprimirá todos los argumentos pasados ​​ejecutando el script.

Ahora intente esto ejecutando su filename.py de esta manera:

 python filename.py example example1 

esto imprimirá 3 argumentos en una lista.

 sys.argv[0] #is the first argument passed, which is basically the filename. 

Del mismo modo, argv 1 es el primer argumento pasado, en este caso “ejemplo”

Una pregunta similar ya se ha hecho aquí por cierto. ¡Espero que esto ayude!

sys.argv es un atributo del módulo sys . Dice los argumentos pasados ​​en el archivo en la línea de comandos. sys.argv[0] el directorio donde se encuentra el archivo. sys.argv[1] devuelve el primer argumento pasado en la línea de comando. Piensa que tenemos un archivo example.py.

example.py

 import sys # Importing the main sys module to catch the arguments print(sys.argv[1]) # Printing the first argument 

Ahora aquí en el símbolo del sistema cuando hacemos esto:

 python example.py 

Lanzará un error de índice en la línea 2. Porque aún no se ha pasado ningún argumento. Puede ver la longitud de los argumentos pasados ​​por el usuario usando if len(sys.argv) >= 1: # Code . Si ejecutamos el example.py con pasar un argumento

 python example.py args 

Se imprime:

 args 

¡Porque fue el primer argumento! Digamos que lo hemos hecho un archivo ejecutable usando PyInstaller. Haríamos esto:

 example argumentpassed 

Se imprime:

 argumentpassed 

Es realmente útil cuando estás haciendo un comando en la terminal. Primero verifique la longitud de los argumentos. Si no se pasan argumentos, haz el texto de ayuda.