单个短划线用于argparse长选项

Jus*_*tin 4 python command-line-interface command-line-arguments argparse

是否有可能使其--longoption表示为-longoption使用argparse?

argparse.prefix_chars 不起作用,因为假设前缀char将重复一个长选项.

我想也许有一种方法可以关闭短选项并允许长选项使用单个破折号而不是双破折号.像这样的东西:

parser = argparse.ArgumentParser()
parser.turn_off_short_opts()
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?如果没有,我可以用什么来完成这个?

hpa*_*ulj 8

单个破折号长参数不是问题:

In [250]: p=argparse.ArgumentParser()

In [251]: p.add_argument('-longargument')
Out[251]: _StoreAction(option_strings=['-longargument'], dest='longargument', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)

In [252]: p.parse_args(['-long','test'])
Out[252]: Namespace(longargument='test')

In [253]: p.parse_args(['-l','test'])
Out[253]: Namespace(longargument='test')
Run Code Online (Sandbox Code Playgroud)

我必须仔细检查代码,但我认为长期和短期期权之间的区别并不重要.创建操作时,所有操作都将添加到option_strings属性中.long(多字符)字符串用于设置'dest',但您也可以自己设置.

Duffy引用的行为:longoption means a completely different thing: It means -l -o -n -g -p -t -i更加微妙.如果-l,-o等等都已定义且不需要参数,则它将使用解释.但它并不妨碍对常规的解释-longoption.但是你应该意识到这些解释,并在开发过程中测试.


这是用于设置destfor选项的代码:

    if dest is None:
        if long_option_strings:
            dest_option_string = long_option_strings[0]
        else:
            dest_option_string = option_strings[0]
Run Code Online (Sandbox Code Playgroud)

就在此之前,它将字符串收集--到long_option_string`列表中.但如果没有这样的字符串,它会使用第一个字符串.

In [270]: p.add_argument('-longargument','-l','--longish')
Out[270]: _StoreAction(option_strings=['-longargument', '-l', '--longish'], dest='longish', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
Run Code Online (Sandbox Code Playgroud)

这里--longish用来代替-longargument.

查看选项字符串长度的唯一其他位置是特殊处理-xyz,它专注于单个字符串('-x',' - y',' - z').