我有一个主脚本,它带有导致其他几个脚本的选项:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-option1', action = "store_true")
group.add_argument('-option2', action = "store_true")
args = parser.parse_known_args()
print args
print args[0].option1
print args[0].option2
if args[0].option1:
print "running sub_script.py"
import sub_script
sub_script.main(args[1])
然后是子脚本:
def main(namespace):
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-sub')
args = parser.parse_args(namespace)
print args
print args.sub
if __name__ == "__main__":
main()
但是,我无法将-h
传递给sub_script.py
,而是返回主脚本的帮助文档。有一种方法可以告诉argparse
显示其他脚本的帮助文档,例如使用:
python main_script.py -option1 -sub -h
答案 0 :(得分:1)
默认情况下,解析器会获得-h
帮助操作。该操作显示帮助消息并退出。因此,在您的情况下,第一个解析器捕获-h
并执行操作,而不转移到第二个解析器。
你可以用以下方式关闭它:
parser = argparse.ArgumentParser(add_help=False)
现在-h
对第一个解析器没有任何意义,它可以调用第二个解析器。如果为获取此help
的解析器定义不同的add_help=False
参数,则可以从两个解析器获得帮助。
如果使用文档中描述的子命令/子分析器机制,(jonrsharpe's
注释)
python prog.py -h
将提供主要帮助,显示option1/option2
选项和
python prog.py option1 -h
将显示option1
子分析器的帮助。从两个解析器获得帮助是棘手的,并且是几个SO问题的主题。