处理 argparse 冲突
Handling argparse conflicts
如果我导入一个已经在使用 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
您需要使用
保护您的导入模块
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
中的函数理想情况下会从您的主模块接收解析的配置参数,该模块将负责解析它们。
如果我导入一个已经在使用 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
您需要使用
保护您的导入模块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
中的函数理想情况下会从您的主模块接收解析的配置参数,该模块将负责解析它们。