pass - sys.argv python español
sys.argv[1] significado en script (8)
Actualmente me estoy enseñando Python y me preguntaba (en referencia a mi ejemplo a continuación) en términos simplificados qué representa sys.argv [1]. ¿Simplemente está pidiendo 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()
Agregando 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). Entonces todas las manipulaciones de la lista se aplicarán aquí. Esto se llama "List Slicing". Para más información, visite here .
La sintaxis es así: list [start: end: step]. 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 quiere tomar todos los argumentos después del 3er argumento, entonces:
user_args = sys.argv[3:]
Supongamos que solo quiere los primeros dos argumentos, entonces:
user_args = sys.argv[0:2] or user_args = sys.argv[:2]
Supongamos que quiere los argumentos 2 a 4:
user_args = sys.argv[2:4]
Supongamos que quiere el último argumento (el último argumento es siempre -1, entonces lo que está sucediendo aquí es que comenzamos el recuento desde atrás. Así que el inicio es último, sin final, sin paso):
user_args = sys.argv[-1]
Supongamos que quiere el segundo último argumento:
user_args = sys.argv[-2]
Supongamos que quiere los dos últimos argumentos:
user_args = sys.argv[-2:]
Supongamos que quiere los dos últimos argumentos. Aquí, el inicio es -2, es decir, el segundo último elemento y luego hasta el final (indicado por ":"):
user_args = sys.argv[-2:]
Supongamos que quiere todo excepto los dos últimos argumentos. Aquí, el inicio es 0 (por defecto), y el final es el segundo último elemento:
user_args = sys.argv[:-2]
Supongamos que quiere los argumentos en orden inverso:
user_args = sys.argv[::-1]
Espero que esto ayude.
Para pasar argumentos a su secuencia de comandos python mientras ejecuta un script a través de la línea de comando
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'']
Simplemente añadiendo 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 al script de la siguiente manera: ./myscript.py foo
, la salida del script será "Hello there foo".
sys.argv es una lista que contiene la ruta del script y los argumentos de la línea de comando; es decir, sys.argv [0] es la ruta del script que está ejecutando y todos los miembros siguientes son argumentos.
sys.argv[1] contiene el primer argument línea de comando pasado a su secuencia de comandos.
Por ejemplo, si su script se llama hello.py
y emite:
$ python3.1 hello.py foo
o:
$ chmod +x hello.py # make script executable
$ ./hello.py foo
Tu script se imprimirá:
Hello there foo
sys .argv mostrará los argumentos de línea de comando pasados al ejecutar un script o puede decir que sys.argv almacenará los argumentos de línea de comando pasados en python mientras se ejecuta desde el 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 intenta esto ejecutando tu 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 sys es el primer argumento pasado, en este caso ''ejemplo''
Una pregunta similar ya se ha hecho here cierto. ¡Espero que esto ayude!
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''
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 de la convención de programació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 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 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 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 es interesante saberlo, rara vez necesitas saber el nombre de tu script. Para obtener el primer argumento después del script 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 un segmento 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 siempre proporcione 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, en la respuesta final a su pregunta específica, sys.argv[1]
representa el primer argumento de línea de comando (como una 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.