当与两个连接的python3脚本一起使用时,argparse发生冲突

原学程将引见当与二个衔接的python三剧本一路应用时,argparse产生抵触的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

当与两个连接的python3脚本一起使用时,argparse发生冲突 教程 第1张

成绩描写

我正在测验考试运转1个原应取得argparse标记的python剧本(Main_SCRIPT),该剧本同时挪用另外一个剧本(Sub_SCRIPT),后者也应取得该标记以停止输出。当我挪用main_script时,我获得1个毛病,说我不克不及应用这个标记,由于它出有在剧本中界说,但是现实上曾经界说了。毛病告诉让我改用下标中的标记。

Main_剧本

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 

子剧本

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_gra妹妹ar.py [-h] [-d]
test_gra妹妹ar.py: error: unrecognized arguments: -p

DEBUG = False
if (args.debug ):
 DEBUG = True

推举谜底

瞅起去像是将主剧本中的敕令言参数传播给子剧本。

您不妨测验考试(或许应当)将argparse实质包装到:

if __name__ == '__main__':
 <argparse stuff>

在这类情形下,只要服从令言挪用剧本时才会挪用代码。真实的代码不妨外包到1个函数中。如许,您不妨经由过程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>)
 ...

佳了闭于当与二个衔接的python三剧本一路应用时,argparse产生抵触的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。