argparse:传递负值时需要一个参数

Noa*_*led 5 python arguments argparse

我试图传递一个参数,它是值列表:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--cb_ticks', required=False, default='')              
args = vars(parser.parse_args())
print(args['cb_ticks'])
Run Code Online (Sandbox Code Playgroud)

对于大多数情况,此代码按预期工作:

  • python test.py --cb_ticks "1" -> 1
  • python test.py --cb_ticks "1,2" -> 1,2
  • python test.py --cb_ticks "-1" -> -1

但是当我尝试传递多个值时,第一个值是负值:

  • python test.py --cb_ticks“-1,2”

我收到以下错误:test.py:

错误:参数 --cb_ticks:需要一个参数

Yur*_*nov 5

add_argument方法允许您告诉参数解析器期望多个(或没有)值:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--cb_ticks', nargs='*')  

args = vars(parser.parse_args())
print(args['cb_ticks'])
Run Code Online (Sandbox Code Playgroud)

但这些值预计以空格分隔,因此您必须按以下方式执行脚本:

python test.py --cb_ticks -1 2
Run Code Online (Sandbox Code Playgroud)

参见参考资料