通过" -h"子脚本的参数

时间:2016-02-22 23:22:24

标签: python arguments argparse

我有一个主脚本,它带有导致其他几个脚本的选项:

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

1 个答案:

答案 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问题的主题。