Python Argparse 有条件地需要参数

新手上路,请多包涵

我已经做了尽可能多的研究,但我还没有找到仅在特定条件下才需要某些 cmdline 参数的最佳方法,在这种情况下,只有在给出其他参数的情况下。这是我想在非常基本的层面上做的事情:

 p = argparse.ArgumentParser(description='...')
p.add_argument('--argument', required=False)
p.add_argument('-a', required=False) # only required if --argument is given
p.add_argument('-b', required=False) # only required if --argument is given

据我所见,其他人似乎只是在最后添加自己的支票:

 if args.argument and (args.a is None or args.b is None):
    # raise argparse error here

有没有办法在 argparse 包中本地执行此操作?

原文由 DJMcCarthy12 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 564
1 个回答

一段时间以来,我一直在寻找此类问题的简单答案。您需要做的就是检查 '--argument' 是否在 sys.argv 中,所以基本上对于您的代码示例,您可以这样做:

 import argparse
import sys

if __name__ == '__main__':
    p = argparse.ArgumentParser(description='...')
    p.add_argument('--argument', required=False)
    p.add_argument('-a', required='--argument' in sys.argv) #only required if --argument is given
    p.add_argument('-b', required='--argument' in sys.argv) #only required if --argument is given
    args = p.parse_args()

This way required receives either True or False depending on whether the user as used --argument .已经测试过,似乎有效并保证 -a-b 彼此之间具有独立的行为。

原文由 Mira 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题