tutorial print imprimir entrada datos comandos python argv

imprimir - print en python 3



Los números pasados como argumentos de línea de comando en python no se interpretan como enteros (6)

Estoy familiarizado con C, y he comenzado a experimentar en Python. Mi pregunta es con respecto al comando sys.argv . He leído que se usa para un intérprete de línea de comandos, pero cuando intento ejecutar un programa simple no obtengo los resultados que esperaba.

Código:

import sys a = sys.argv[1] b = sys.argv[2] print a, b print a+b

Entrada:

python mySum.py 100 200

Salida:

100 200 100200

Cuando agrego los dos argumentos, se concatenan en lugar de que los dos valores se agreguen juntos. Parece que los valores están siendo tomados como cadenas.

¿Cómo puedo interpretarlos como números?


De hecho, usted mismo ha encontrado el problema, sys.argv es una serie de cadenas.

Puede transformar una cadena en un entero con int() . En este caso, por ejemplo: a = int(sys.argv[1])


En Python, las cadenas no se convierten implícitamente a números enteros. Tratar

num1 = int(sys.argv[1]) This would represent the numerical value of the number, not its string representation.


Puedes convertir los argumentos a enteros usando int ()

import sys a = int(sys.argv[1]) b = int(sys.argv[2]) print a, b print a+b

entrada: python mySum.py 100 200

salida:

100 200 300


También debe validar la entrada del usuario:

import sys def is_intstring(s): try: int(s) return True except ValueError: return False for arg in sys.argv[1:]: if not is_intstring(arg): sys.exit("All arguments must be integers. Exit.") numbers = [int(arg) for arg in sys.argv[1:]] sum = sum(numbers) print "The sum of arguments is %s" % sum


Tenga cuidado de realizar comparaciones que involucren argumentos de línea de comando, lo que puede llevar a un comportamiento realmente inesperado debido a la política de Python 2 para comparar objetos de diferentes tipos (''int'' <''list'' <''string'' <''tupla'') como se indica here . En Python 3, la comparación de objetos de diferentes tipos conducirá a un TypeError.

Para ver un ejemplo de caos en la comparación de objetos, intente eliminar la llamada int() en la sección 6.1.1. del código Fibonacci del tutorial de Python y obtendrás un bucle infinito, ya que la condición del bucle while se convierte en: ''int'' <''string''. (Esto no sucedería en Perl, por cierto).

Un gran consejo de @ Jan-Philip arriba para validar los argumentos de la línea de comandos, incluso para Python 3.


sys.argv elementos de sys.argv siempre son strings . deberías lanzarlos a int con int(a) .

También puede usar bibliotecas de terceros para manejar argumentos de la CLI, como OptParse .