2011-04-15 12 views
8

He estado usando cmdargs para el procesamiento de argumentos por un tiempo, y es genial. Sin embargo, no veo una opción para nombres de opciones largas con un solo guión, p. -option1 -option2 o el más difícil -optx que es equivalente a --opt=x. Necesito mantener la compatibilidad con una aplicación existente, por lo que estos formatos son necesarios.Haskell commandline argument handling library

System.Console.Getopt tampoco parece estar a la altura. ¿Alguien puede proporcionar una muestra de cómo hacer esto con cmdargs o sugerir una biblioteca alternativa que respalde esto?

+3

Convención GNU es dos guiones para opciones largas. Creo que las bibliotecas como getopt están diseñadas con el propósito de hacer cumplir esta convención de manera consistente. Si yo fuera tú, trataría de usar getArgs directamente y escribir mi propia función de procesamiento de opciones no estándar (estilo ImageMagick o lo que sea). – sastanin

+0

@jetxee - Podría hacerlo, pero luego tengo que escribir mis propios mensajes de ayuda. Al menos sería relativamente sencillo analizar getArgs para esto. Curiosamente, es un ejecutable GNU con el que necesito compatibilidad. –

Respuesta

9

Probablemente lo más simple que puede hacer es hacer usted mismo un pase rápido de preprocesamiento. Por ejemplo, si usted necesita para apoyar exactamente las tres opciones -option1, -option2 y -optx, algo como esto debería funcionar:

munge "-option1" = "--option1" 
munge "-option2" = "--option2" 
munge s | "-opt" `isPrefixOf` s = "--opt=" ++ drop 4 s 
munge s = s 

main = do 
    realArgs <- getArgs 
    withArgs (map munge realArgs) mainThatUsesCmdArgs 

Como usted dice, sin embargo, los mensajes de ayuda serían entonces ya no hablar de la posibilidad de tener estas formas cortas. (Quizás eso sea bueno, sin embargo).

Si quiere más, probablemente tendrá que convencer a alguien para que modifique cmdargs.