2017-06-15 113 views
0

我需要有其形式为 “蟒script.py --step1 = 100 --step3 = 53 --step2 = 34”argparse的参数的图案

的要求是

    命令行
  • 我不知道有多少--stepN标志有提前
  • 的--stepN标志的顺序没有设置,所以我不能只用行动=“追加”

我m也对这些限制感兴趣:

  • 步数应该是连续的,所以如果使用了--step20,但是--step19丢失,这是一个错误。
  • 我想在一个列表中的值的目的地。因此,在上面的命令行例如,我想像做

    ARGS = parser.parse_args()

    args.steps#是列表[100,34,53]

灿argparse采取一种格言,不知何故,我可以写一个自定义的动作或类型来做我想做的事情?我在想像

parser.add_argument('--step*', 
        type=CustomType, 
        action=CustomAction, 
        help='Use --step1=a --step2=b, ....') 
+0

您可以根据您的要求传递字典。 – Stack

回答

0

这不是一个好的​​契合。关于接受一般化的key=value输入和各种kludgey答案,一直存在一些问题。大部分答案等于你自己解析字符串,从sys.argvextrasparse_known_args

Create variable key/value pairs with argparse (python)

这是与你的主要形式加入要求千真万确。

在最近这样的问题,我建议使用appendnargs=2所以输入会是这样的形式:

python script.py --step 1 100 --step 2 53 --step 3 34 

生产

Namespace(step=[[1,100], [2,53], [3, 24]]) 

,你可能值检查过程和你的心脏的内容。

Support arbitrary number of related named arguments with Python argparse