2009-08-22 12 views
7

Estoy escribiendo un programa en Python que acepta argumentos de línea de comandos. Los estoy analizando con getopt (aunque mi elección de getopt no es matrimonio católico. Estoy más que dispuesto a usar cualquier otra biblioteca). ¿Hay alguna forma de especificar que ciertos argumentos deben ser o tengo que asegurarme manualmente de que todos los argumentos fueron dados?¿Cómo puedo especificar que algunos argumentos de línea de comandos son obligatorios en Python?

Editar: he cambiado todas las instancias de opción a argumento en respuesta a la protesta pública. Que no se diga que no respondo a las personas que me ayudan :-)

+1

+1 por la metáfora del matrimonio católico. Me hizo sonreir. – Imagist

+1

"opción obligatoria" es contradictorio. Te refieres a "argumentos". Y, al parecer, te refieres a "argumentos" con la sintaxis de "opciones". Las opciones/argumentos están bien definidas aquí: http://docs.python.org/library/optparse.html#terminology y aquí: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02 –

Respuesta

7

El enfoque más simple sería hacerlo usted mismo. Es decir.

found_f = False 
try: 
    opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) 
except getopt.GetoptError, err: 
    print str(err) 
    usage() 
    sys.exit(2) 
for o, a in opts: 
    if o == '-f': 
     process_f() 
     found_f = True 
    elif ... 
if not found_f: 
    print "-f was not given" 
    usage() 
    sys.exit(2) 
+0

Estaba buscando una forma de no hacerlo yo mismo, pero si no hay ninguno, entonces supongo que esta es la respuesta. –

9

En cuanto a mí Yo prefiero usar optparse module, es bastante potente, para exapmle se puede generar automáticamente mensajes -h opciones dadas por:

from optparse import OptionParser 

parser = OptionParser() 
parser.add_option("-f", "--file", dest="filename", 
        help="write report to FILE", metavar="FILE") 
parser.add_option("-q", "--quiet", 
        action="store_false", dest="verbose", default=True, 
        help="don't print status messages to stdout") 

(options, args) = parser.parse_args() 

Debe comprobar manualmente si se les dio todos los argumentos:

if len(args) != 1: 
     parser.error("incorrect number of arguments") 

Haciendo opciones obligatoria parece ser bastante extraño para mí - se les llama opciones no sin sentido ...

+0

Si el valor * debe * ser dado, pero usted tiene la opción de qué valor dar, entonces sigue siendo una opción, ¿verdad? ¿Como lo llamarias? –

+0

Lo siento, todavía no entendí el propósito de esto. ¿Puedes darme un ejemplo, p. describiendo la entrada de cli? No es esencial el problema exacto que está resolviendo, cualquiera ... –

+0

seguro. Estoy escribiendo un script que funciona en un archivo. Si no especifica un nombre de archivo, la secuencia de comandos no sabrá en qué trabajar, por lo que el nombre de archivo es obligatorio. –

Cuestiones relacionadas