doit任务无法接收命令行传入参数的问题求助
doit任务无法接收命令行传入参数的问题求助
嘿,我仔细看了下你的问题,这是因为doit不会自动把任务参数名映射成--xxx这种命令行长选项,得咱们手动绑定才行!
先看你现在的参数定义:
'params':[ {'name':'zone', 'default': 'BLANKZONE'}, {'name':'stype', 'default': 'BLANKSTYPE'} ]
这里你只给参数设了名字和默认值,但没告诉doit:“这个stype参数对应的命令行选项是--stype”。从错误日志里也能看出来端倪:
option --stype not recognized (parsing options: [CmdOption({'name':'zone', 'short':'','long':'' }), CmdOption({'name':'stype', 'short':'','long':'' })]). Got: ['--stype', 'email-sifter', '--zone', 'uat']
你看CmdOption里的long字段是空的,doit根本不知道--stype对应哪个任务参数,可不就报错说识别不了嘛!
解决方法超简单,给每个参数加上long字段,指定它对应的命令行长选项名就行,修改后的DAG代码如下:
def task_build(): """build""" def python_build(stype, zone): print(f"TYPE: {stype}, ZONE: {zone}") return { 'actions': [python_build], 'verbosity':2, 'params':[ {'name':'zone', 'default': 'BLANKZONE', 'long': 'zone'}, {'name':'stype', 'default': 'BLANKSTYPE', 'long': 'stype'} ] }
要是你想用短选项(比如-z代替--zone),还可以再加个short字段,比如{'name':'zone', 'default': 'BLANKZONE', 'long': 'zone', 'short': 'z'},这样命令行里用-z uat也能传参啦。
改完之后你再运行原来的命令:
doit -f ./srvapp/doit-build.py build --stype email-sifter --zone uat
应该就能正常识别参数,不会再报错啦!
备注:内容来源于stack exchange,提问作者Pompey Magnus
相关产品推荐
相关产品推荐

