Actualmente me estoy enseñando Python y me preguntaba (en referencia a mi ejemplo a continuación) en términos simplificados qué sys.argv[1]
representa. ¿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()
Respuestas:
Me gustaría señalar que las respuestas anteriores hicieron muchas suposiciones sobre el conocimiento del usuario. Esta respuesta intenta responder la pregunta en un nivel más tutorial.
Para cada invocación de Python,
sys.argv
hay 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á obtener más información 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 están representados. También imprime el número de argumentos, usando la
len
función en la lista.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.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 usarlo
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 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 enteros basados en cero, puede obtener los elementos individuales utilizando la sintaxis list [0]. Por ejemplo, para obtener el nombre del script:
Aunque interesante, rara vez necesita saber el nombre de su script. Para obtener el primer argumento después del script para un nombre de archivo, puede hacer lo siguiente:
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, por lo que para obtener otra lista de solo los argumentos proporcionados por el usuario (pero sin el nombre del script), puede hacer
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:
Entonces, para responder a su pregunta específica,
sys.argv[1]
representa el primer argumento de línea de comandos (como astring
) 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 que sigue al nombre del script.fuente
sys.argv
, me pregunto qué hace la líneafrom __future__ import print_function
. ¿Es algo que debo agregar si NO estoy ejecutando Python 3 sino Python 2? @Jason R. Coombssys.argv **is** automatically a list of strings
. ¿Te refieres a "da" o "devuelve"?argv
atributo delsys
módulo es una referencia a un objeto de lista que contiene las cadenas de los argumentos. Usargives
oreturns
sugerir una invocación de función o generador u otra construcción.references
orepresents
pueden ser términos más precisos, perois
lo suficientemente cercanos.main
importando el módulo (digamos que el nombre del módulo esmoduleA.py
) y llamo a la función como enimport moduleA; moduleA.main()
. En ese caso, no hay argumentos de línea de comandos ... por lo tanto, sesys.argv[0]
supone que representa elfilename
ie. debería imprimirmoduleA.py
?sys.argv [1] contiene el primer argumento de línea de comando pasado a su script.
Por ejemplo, si su script se nombra
hello.py
y emite:o:
Su guión imprimirá:
fuente
sys.argv
es una listaEsta 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,
sys.argv
se convertirá en una lista ['file.py', 'algo']En este caso
sys.argv[1] = 'something'
fuente
Simplemente agregue 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" ysys.argv[2]
sería "bar" ... y así sucesivamente.En su código de ejemplo, si llama al script de la siguiente manera
./myscript.py foo
, la salida del script será "Hola, foo".fuente
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 sys.argv como una lista de cadenas como (mencionado por Jason). Entonces, todas las manipulaciones de la lista se aplicarán aquí. Esto se llama "corte de lista". Para más información visite aquí .
La sintaxis es así: lista [inicio: fin: 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, luego:
Supongamos que solo desea los dos primeros argumentos, luego:
Supongamos que quiere argumentos 2 a 4:
Supongamos que desea el último argumento (el último argumento es siempre -1, así que lo que está sucediendo aquí es que comenzamos el conteo desde atrás. Así que el comienzo es el último, sin final, sin paso):
Supongamos que quieres el segundo último argumento:
Suponga que quiere los dos últimos argumentos:
Supongamos que quieres los dos últimos argumentos. Aquí, el comienzo es -2, que es el segundo último elemento y luego hasta el final (indicado por ":"):
Supongamos que quiere todo excepto los dos últimos argumentos. Aquí, el inicio es 0 (por defecto), y el final es el segundo último elemento:
Suponga que quiere los argumentos en orden inverso:
Espero que esto ayude.
fuente
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.
fuente
Para pasar argumentos a su secuencia de comandos de Python mientras ejecuta una secuencia de comandos a través de la línea de comandos
aquí, nombre del script: create_thumbnail.py, argumento 1 - prueba1.jpg, argumento 2 - prueba2.jpg
Con el script create_thumbnail.py que uso
que me dan la lista de argumentos que pasé en la línea de comando como ['test1.jpg', 'test2.jpg']
fuente
sys.argv
Es un atributo delsys
módulo. Dice los argumentos pasados al archivo en la línea de comando.sys.argv[0]
captura el directorio donde se encuentra el archivo.sys.argv[1]
devuelve el primer argumento pasado en la línea de comando. Piensa como si tuviéramos un archivo example.py.ejemplo.py
Ahora aquí en el símbolo del sistema cuando hacemos esto:
Lanzará un error de índice en la línea 2. Porque todavía 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 argumentoImprime:
¡Porque fue el primer argumento! Digamos que lo hemos convertido en un archivo ejecutable usando PyInstaller. Haríamos esto:
Imprime:
Es realmente útil cuando haces un comando en la terminal. Primero verifique la longitud de los argumentos. Si no se pasan argumentos, haga el texto de ayuda.
fuente
sys .argv mostrará los argumentos de la línea de comandos pasados al ejecutar un script o puede decir que sys.argv almacenará los argumentos de la línea de comandos pasados en python mientras se ejecuta desde la terminal.
Solo intenta esto:
argv almacena todos los argumentos pasados en una lista de python. Lo anterior imprimirá todos los argumentos pasados ejecutarán el script.
Ahora intente esto ejecutando su filename.py así:
Esto imprimirá 3 argumentos en una lista.
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!
fuente