valor una script recibir que por pasar parametros parametro lista linea español ejecutar desde consola con como comandos capturar archivo python command-line command-line-arguments

una - ¿Cómo puedo procesar los argumentos de línea de comando en Python?



recibir variables python (5)

Como otros respondieron, optparse es la mejor opción, pero si solo quieres un código rápido prueba algo como esto:

import sys, re first_re = re.compile(r''^/d{3}$'') if len(sys.argv) > 1: if first_re.match(sys.argv[1]): print "Primary argument is : ", sys.argv[1] else: raise ValueError("First argument should be ...") args = sys.argv[2:] else: args = () # ... anywhere in code ... if ''debug'' in args: print ''debug flag'' if ''xls'' in args: print ''xls flag''

EDITAR : Aquí hay un ejemplo de optparse porque muchas personas están respondiendo optparse sin realmente explicar por qué, o explicando lo que tiene que cambiar para que funcione.

La razón principal para usar optparse es que le da más flexibilidad para la expansión más adelante, y le da más flexibilidad en la línea de comandos. En otras palabras, sus opciones pueden aparecer en cualquier orden y los mensajes de uso se generan automáticamente. Sin embargo, para que funcione con optparse, debe cambiar sus especificaciones para poner ''-'' o ''-'' delante de los argumentos opcionales y debe permitir que todos los argumentos estén en cualquier orden.

Así que aquí hay un ejemplo usando optparse:

import sys, re, optparse first_re = re.compile(r''^/d{3}$'') parser = optparse.OptionParser() parser.set_defaults(debug=False,xls=False) parser.add_option(''--debug'', action=''store_true'', dest=''debug'') parser.add_option(''--xls'', action=''store_true'', dest=''xls'') (options, args) = parser.parse_args() if len(args) == 1: if first_re.match(args[0]): print "Primary argument is : ", args[0] else: raise ValueError("First argument should be ...") elif len(args) > 1: raise ValueError("Too many command line arguments") if options.debug: print ''debug flag'' if options.xls: print ''xls flag''

Las diferencias aquí con optparse y su especificación es que ahora puede tener líneas de comando como:

python script.py --debug --xls 001

y puede agregar nuevas opciones fácilmente llamando a parser.add_option ()

¿Cuál sería una expresión fácil de procesar los argumentos de la línea de comandos si estoy esperando algo como 001 o 999 (limitemos las expectativas al rango 001 ... 999 para este momento) y pasen algunos otros argumentos, y nos gustaría ignorar cualquier imprevisto? ?

Entiendo, por ejemplo, si necesito averiguar si se pasó "depuración" entre los parámetros, será algo así:

if ''debug'' in argv[1:]: print ''Will be running in debug mode.''

¿Cómo saber si se aprobó 009 o 575?

Todas esas llamadas son esperadas:

python script.py python script.py 011 python script.py 256 debug python script.py 391 xls python script.py 999 debug pdf

En este punto, no me importan las llamadas como esa:

python script.py 001 002 245 568 python script.py some unexpected argument python script.py 0001 python script.py 02

... primero, debido a más de un argumento "numérico"; segundo, debido a ... bueno, argumentos inesperados; tercero y cuarto - debido a argumentos que no tienen 3 dígitos.


Eche un vistazo al módulo optparse . Tratar con sys.argv usted mismo está bien para cosas realmente simples, pero se sale de control rápidamente.

Tenga en cuenta que puede encontrar optparse más fácil de usar si puede cambiar un poco el formato de su argumento; por ejemplo, reemplazar la debug con --debug y xls con --xls o --output=xls .


Si desea implementar los interruptores de línea de comando reales, eche un vistazo a getopt . Es increíblemente simple de usar, también.


Van Gale es en gran medida correcto al usar la expresión regular contra el argumento. Sin embargo, NO es absolutamente necesario hacer que todo sea una opción cuando se usa optparse, que divide sys.argv en opciones y argumentos, en función de si un "-" o "-" está al frente o no. Algunos ejemplos de código para pasar solo por los argumentos:

import sys import optparse claParser = optparse.OptionParser() claParser.add_option( (opts, args) = claParser.parse_args() if (len(args) >= 1): print "Arguments:" for arg in args: print " " + arg else: print "No arguments" sys.exit(0)

Sí, la matriz args se analiza de la misma manera que sys.argv, pero se agregó la posibilidad de agregar opciones fácilmente si es necesario. Para obtener más información acerca de optparse, consulte el documento de Python correspondiente .


optparse es tu mejor amigo para analizar la línea de comando. También mira en argparse ; sin embargo, no está en la biblioteca estándar.