GNU getopt和使用它的命令行工具允许选项和参数交错,称为排列选项(请参阅http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt)。 Perl的Getopt :: Long模块也支持这个(使用qw(:config gnu_getopt))。 argparse似乎不支持(甚至不提)排列选项。Python的argparse排列顺序可以像gnu getopt一样吗?
有很多SO问题与arg/opt顺序有关,但似乎没有人回答这个问题:是否可以使用getopt来排列参数顺序的argparse?
用例是原型命令行签名等GNU排序:其中
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 - 不抱怨,但实际上并没有任何置换,并没有放水有关参数看起来像无效的选项(例如, - 博格斯或上面的-b)。
- p.add_argument( '文件',NARGS = argparse.REMAINDER) - 选项-z被包括在文件,除非前位置ARGS
- p.add_argument( '文件',NARGS = '*',动作=”附加');
我想实现一些接近上面的GNU排序原型。我对可以为每个文件指定的标志不感兴趣(例如-f file1 -f file2)。