2011-01-21 50 views
5

Actualmente estoy pasando por Learn Python The Hard Way. Creo que este ejemplo podría estar desactualizado, así que quería recibir comentarios al respecto.Usando argumentos de línea de comando en Python: Comprender sys.argv

estoy usando Python 3,1

from sys import argv 

script, first, second, third = argv 

print("the script is called:", (script)) 
print("your first variable is:", (first)) 
print("your second variable is:", (second)) 
print("your third variable is:", (third)) 

que estoy recibiendo este error:

Traceback (most recent call last): 
    File "/path/ch13.py", line 3, in <module> 
    script, first, second, third, bacon = argv 
ValueError: need more than 1 value to unpack 

Alguna idea de lo que está mal?

Respuesta

8

Olvidó pasar argumentos a la secuencia de comandos, p. Ej. foo.py bar baz quux.

enter image description here

+0

soy un novato, ¿cuál es la forma correcta de hacer eso con el código que he escrito? –

+0

'foo.py bar baz quux' –

+0

Dijo que debe ejecutar la línea de comandos en este ejercicio. Abra CMD (Ventana) y escriba: ex13.py script_value first_value second_value third_value –

3

sys.arg es una lista de parámetros de línea de comandos. Necesita pasar parámetros de línea de comandos al script para completar esta lista. Para ello, ya sea en la configuración del proyecto de su IDE o mediante la ejecución de este tipo en la línea de comandos:

python script.py first second third 

Tenga en cuenta que el primer argumento es siempre el nombre de la secuencia de comandos (python script.py en este caso). Debido a su uso de desembalaje, obtendrá un ValueError cada vez que pase menos o más de 3 parámetros. Puede comprobar el número antes de desempaquetar usando len(argv)-1 y presentar un error si no es adecuado 3.

En una nota relacionada, mira getopt si usted tiene que hacer el paso de argumentos más complejos.

4

Con el fin de pasar argumentos, tendrá que ejecutar el script de esta manera:

python fileName.py argument1 argument2 

Dependiendo del número de variables que tiene = a argv, esto es la cantidad que necesita tener menos la primera argumento (guión). Por ejemplo,

script, first, second, third = argv 

debe tener 3 argumentos.

0

Está intentando descomprimir argv en valores independientes. Desempaquetar requiere que la cantidad exacta de valores coincida con el tamaño del valor para desempaquetar. Considere esto:

a, b, c = [1, 2, 3] 

funciona bien, pero esto:

a, b, c, d, e = [1] 

le dará el mismo error feo, que se acaba de producir. Desempaquetar sys.argv de la manera en que lo hizo es especialmente malo, porque es una entrada del usuario, y usted no sabe, cuántos argumentos proporcionarán los usuarios de su secuencia de comandos. Por lo tanto, debe desempaquetarlo con más cuidado:

if len(argv) == 5: 
    script_name, a, b, c, d = argv 
else: 
    print "This script needs exactly four arguments, aborting" 
    exit() 
0

Todo lo que tiene que hacer es escribir tres cosas al abrir el script. Por ejemplo, ejecute python (luego su filename.py) 1 2 3. El "1, 2 y 3" puede ser reemplazado con tres números o palabras.

0

Para ejecutar este script en la línea de comandos, debe usar tres argumentos. Usted tendrá que escribir algo similar a lo siguiente:

python /path/ch13.py first second third 
0

ejecutar el código de la siguiente manera:

python ch13.py first second third 
0
from sys import argv 
a, b, c, d = argv 
print "The script is called:", a 
print "Your first variable is:", b 
print "Your second variable is:", c 
print "Your third variable is:", d 

Guardar este script como: s.py

Ejecutar este proceso desde la terminal de la siguiente manera: enter image description here

0

Usted puede hacer

(script, first, second, third) = argv 

y pasar 3 argumentos

python filename arg1 arg2 arg3 

cuando se ejecuta desde la línea de comandos.

Estoy usando Python 3.6.0. Antes no estaba envolviendo los argumentos argv entre llaves. Pero ahora funciona.

you can check it here

+1

gracias @paul ... No conozco el formato. – beat7Bx

Cuestiones relacionadas