Может ли Python argparse переставлять порядок аргументов, как gnu getopt?

GNU getopt и инструменты командной строки, которые его используют, позволяют чередовать параметры и аргументы, известные как параметры перестановки (см. http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt). Модуль Perl Getopt::Long также поддерживает это (с помощью qw(:config gnu_getopt) ).Похоже, что argparse не поддерживает (и даже не упоминает) параметры перестановки.

Есть много SO-вопросов, связанных с порядком arg/opt, но ни один из них не отвечает на этот вопрос: можно ли заставить argparse переставлять порядок аргументов, как getopt?

] Вариант использования — это типичная сигнатура командной строки, такая как GNU sort:

sort [opts] [files]

, в которой 1) параметры и файлы переставляются, и 2) список файлов может содержать ноль или более аргументов.

Например:

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 ...]]

Я пробовал:

  • p.parse_known_args -- не жалуется, но и не переставляет местами, и не игнорирует аргументы, которые выглядят как недопустимые параметры (например, --bogus или -b выше).
  • p.add_argument('files',nargs=argparse.REMAINDER) -- опция -z включается в файлы, если только они не предшествуют позиционным args
  • p.add_argument('files',nargs='*',action=' append');

Я хочу реализовать что-то близкое к прототипу сортировки GNU выше. Меня не интересует флаг, который можно указать для каждого файла (например, -f файл1 -f файл2).

9
задан Reece 2 March 2012 в 06:15
поделиться