【问题标题】:Pass the "-h" argument to the sub-script将“-h”参数传递给子脚本
【发布时间】:2016-06-04 14:26:56
【问题描述】:

我有一个主脚本,其中包含一些选项,这些选项会导致其他几个脚本:

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

【问题讨论】:

  • 我想你想要一个sub-command,它有它自己的帮助。

标签: python arguments argparse


【解决方案1】:

默认情况下,解析器会获取-h 帮助操作。该操作显示帮助消息并退出。因此,在您的情况下,第一个解析器捕获 -h 并采取行动,而无需转到第二个解析器。

您可以通过以下方式关闭它:

parser = argparse.ArgumentParser(add_help=False)

现在-h 对第一个解析器没有任何意义,它可以调用第二个解析器。如果您为获取此 add_help=False 的解析器定义不同的 help 参数,您可以从两个解析器中获得帮助。

如果你使用文档中描述的子命令/子解析器机制,(jonrsharpe'scomment)

 python prog.py -h

将为主要提供帮助,显示option1/option2 选项,并且

 python prog.py option1 -h

将显示option1 子解析器的帮助。从两个解析器获得帮助比较棘手,并且是几个 SO 问题的主题。

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多