如何使用选择性结构调用基于 argparse 的函数?

Posted

技术标签:

【中文标题】如何使用选择性结构调用基于 argparse 的函数?【英文标题】:How to call function based on argparse using selective structure? 【发布时间】:2019-11-17 01:07:18 【问题描述】:

我是 python 新手,我想知道如何在选择性结构上调用基于 argparse 的函数

我试过这个功能

def parseArgument(abv, name, hdescriptop, isrequired):
  parser=argparse.ArgumentParser()
  parser.add_argument(abv, 
                      name, 
                      help=hdescription, 
                      required=isrequired,
                      action="store_true",
                      )
  args=parser.parse_args()
  return args

parseArgument("-y", "--humedity", "Calculate humedity", False)

if args.cycle:
  print("DPV cycle: ", DPV(w, 0, list_DPV_CYCLE, count_NC))
#elif args.moredata:
#  print(more data)

*提示:无需知道 DPV 是什么

我希望当我在终端上运行 python 脚本并编写 python nameofthescript.py -y,获取被调用函数 parseArgument() 具有选择性结构

【问题讨论】:

使用store_true时不要设置required参数。 parseArgument 返回一个 args 变量;调用代码应该保存它;例如..args = parseArgument(...)。调试时添​​加print(args)。为什么您期望 args.circle 属性?您没有定义 circle 参数。 @hpaulj 你是对的。 args.cicle 在我使用时为我工作,但没有使其成为函数parser.add_argument('-c','--cycle', action="store_true", help="show cycle data") 【参考方案1】:

跟进我的评论:

In [50]: def parseArgument(argv, abv, name, hdes): 
    ...:   parser=argparse.ArgumentParser() 
    ...:   parser.add_argument(abv,  
    ...:                       name,  
    ...:                       help=hdes,  
    ...:                       action="store_true", 
    ...:                       ) 
    ...:   args=parser.parse_args(argv) 
    ...:   return args 
    ...:  
    ...: args = parseArgument([], "-y", "--humedity", "Calculate humedity")                                     
In [51]: args                                                                                                   
Out[51]: Namespace(humedity=False)
In [52]: args.humedity                                                                                          
Out[52]: False

测试不同的命令行:

In [53]: args = parseArgument(['-y'], "-y", "--humedity", "Calculate humedity")                                 
In [54]: args                                                                                                   
Out[54]: Namespace(humedity=True)
In [55]: args.humedity                                                                                          
Out[55]: True

【讨论】:

以上是关于如何使用选择性结构调用基于 argparse 的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单元测试中使用 argparse 参数调用函数?

为啥直接调用 Python 脚本时 argparse 无法识别参数?

使用 argparse 输出调用函数

python调用使用argparser的模块

如何在 SQL*Plus 中将参数(值)从函数传递/调用到“选择”stmt?

如何在 argparse 帮助文本上插入换行符?