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