如果我导入一个Pythonmodule https://github.com/paulcalabro/api-kickstart/blob/master/examples/python/config.py已经在使用argparse,但是,我想用argparse在我的脚本中也是如此......我应该如何去做呢?
我收到了不被认可的论点使用以下代码并使用 -t 标志调用脚本时出错:
Snippet:
#!/usr/bin/env python
....
import conflicting_module
import argparse
...
#################################
# Step 0: Configure settings... #
#################################
parser = argparse.ArgumentParser(description='Process command line options.')
parser.add_argument('--test', '-t')
Error:
unrecognized arguments: -t foobar
你需要守护你的导入模块 with
if __name__ == '__main__':
...
反对它运行初始化代码,例如导入时的参数解析。看什么是if __name__ == "__main__": do? https://stackoverflow.com/questions/419163/what-does-if-name-main-do.
所以,在你的conflicting_module
do
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Process command line options in conflicting_module.py.')
parser.add_argument('--conflicting', '-c')
...
而不是仅仅在全局范围内创建解析器。
如果解析中conflicting_module
是应用程序配置的强制性部分,请考虑使用
args, rest = parser.parse_known_args()
在你的主模块中并传递rest
to conflicting_module
,你会通过的地方None
or rest
to parse_args
:
args = parser.parse_args(rest)
这仍然是一个有点糟糕的风格,实际上里面的类和函数conflicting_module
理想情况下,将从主模块接收已解析的配置参数,该模块负责解析它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)