与两个连接的 python3 脚本一起使用时的 argparse 冲突
Posted
技术标签:
【中文标题】与两个连接的 python3 脚本一起使用时的 argparse 冲突【英文标题】:argparse conflict when used with two connected python3 scripts 【发布时间】:2019-09-13 17:40:24 【问题描述】:我正在尝试运行一个应该获取 argparse 标志的 python 脚本(Main_Script),并且该脚本同时调用另一个脚本(Sub_Script),该脚本也应该获取要输入的标志。当我调用 Main_Script 时,我收到一个错误,说我不能使用该标志,因为它没有在脚本中定义,但它实际上是定义的。错误通知让我使用下标中的标志。
主脚本
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-p', '--print_positive_results', action='store_true')
args = parser.parse_args()
PRINT_POSITIVE = args.print_positive_results
#I then use rhi global variable PRINT_POSITIVE
SUB_SCRIPT
import argparse
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-d', '--debug', action='store_true')
args = parser.parse_args()
当我打电话给python MAIN_SCRIPT.py -p
时,我明白了
usage: test_grammar.py [-h] [-d]
test_grammar.py: error: unrecognized arguments: -p
DEBUG = False
if (args.debug ):
DEBUG = True
【问题讨论】:
是test_grammar.py
“MAIN_SCRIPT”还是“SUB_SCRIPT”?
您的调用指令 python MAIN_SCRIPT.py -p
与程序的输出不匹配:test_grammar.py: error: ...
所以您可能不会调用包含主脚本的模块。
每个活动的解析器看到相同的sys.argv
。要么编写它们,以便它们可以接受彼此的论点(parse_known_args
可以提供帮助),要么将它们设置为只运行一个解析器。将解析放在 if __name__
块中会阻止解析 import
。
test_grammar 是下标
【参考方案1】:
似乎主脚本中的命令行参数被传递到子脚本。
您可以尝试(并且可能应该)将 argparse 内容包装到:
if __name__ == '__main__':
<argparse stuff>
这样,只有在从命令行调用脚本时才会调用代码。真正的代码可以外包到一个函数中。这样你就可以在命令行中使用带有 argparse 的脚本,并且只有在你从另一个脚本中调用它时才从脚本中导入函数:
主脚本:
import argparse
import subscript
if __name__ == '__main__':
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-p', '--print_positive_results', action='store_true')
args = parser.parse_args()
...
subscript.your_function(<whatever your args are>)
...
子脚本:
import argparse
def your_function(<your args>):
<your code>
if __name__ == '__main__':
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-d', '--debug', action='store_true')
args = parser.parse_args()
your_function(<whatever your args are>)
...
【讨论】:
以上是关于与两个连接的 python3 脚本一起使用时的 argparse 冲突的主要内容,如果未能解决你的问题,请参考以下文章