如果我导入已经使用 argparse 的Python module,我想在我的脚本中使用 argparse ......我应该这样做吗?
使用以下代码并使用-t标志调用脚本时,我收到无法识别的参数错误:
段:
#!/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')
错误:
unrecognized arguments: -t foobar
答案 0 :(得分:1)
您需要使用
保护导入的模块if __name__ == '__main__':
...
反对它运行初始化代码,例如导入时的参数解析。请参阅What does if __name__ == "__main__":
do?。
所以,在你的conflicting_module
做
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
传递给conflicting_module
,您可以将None
或rest
传递给parse_args
:
args = parser.parse_args(rest)
这仍然是一个糟糕的样式,实际上conflicting_module
中的类和函数理想情况下会从主模块接收解析的配置参数,它将负责解析它们。