GNU getopt, y las herramientas de línea de comandos que lo usan, permiten el intercalado de opciones y argumentos, conocidos como opciones de permuta (vea http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt). El módulo Getopt :: Long de Perl también es compatible con esto (con qw (: config gnu_getopt)). argparse parece no apoyar (o incluso mencionar) las opciones de permuta.¿Puede el argumento argparse permute de Python ordenar como gnu getopt?
Hay muchas preguntas relacionadas con el orden arg/opt, pero ninguna parece responder a esta pregunta: ¿se puede hacer argparse para permutar el orden de los argumentos como getopt?
El caso de uso es una firma de línea de comandos prototípico como GNU para ordenar:
sort [opts] [files]
en el que 1) las opciones y los archivos son permutada, y 2) la lista de archivos puede contener cero o más argumentos.
Por ejemplo:
import argparse
p = argparse.ArgumentParser();
p.add_argument('files',nargs='*',default=['-']);
p.add_argument('-z',action='store_true')
p.parse_args(['-z','bar','foo']) # ok
p.parse_args(['bar','foo','-z']) # ok
p.parse_args(['bar','-z','foo']) # not okay
usage: ipython [-h] [-z] [files [files ...]]
He intentado:
- p.parse_known_args - no se queja, pero en realidad no permutar cualquiera y que no se opone acerca de los argumentos que parecen opciones inválidas (p. ej., - bogus o -b arriba).
- p.add_argument ('ficheros', nargs = argparse.REMAINDER) - opción -z se incluye en los archivos a menos que antes argumentos posicionales
- p.add_argument ('files', nargs = '*', acción =' adjuntar');
Quiero implementar algo parecido al prototipo de ordenamiento GNU anterior. No estoy interesado en un indicador que se pueda especificar para cada archivo (por ejemplo, -f archivo1 -f archivo2).