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)。