python abseil库(app, flags, logging)总结

absl (Abseil PythonCommon Libraries)(https://abseil.io/docs/python/)是用于构建Python应用程序的Python库代码集合,它包括三个子库:app, flags, logging。

app

  • app是Abseil Python应用程序的通用入口点。

flags

  • absl.flags定义了分布式的命令行系统。flags类型包括boolean, float, integer, list, string等,通过DEFINE_*函数来定义,其中的*表示flags类型。所有的flags都包括一个变量名称,默认值,help-string和可选的单字母名称。一些flags还包括其他参数。
  • DEFINE_*函数主要做了两件事情。第一,创建Flag对象;第二,将Flag对象注册到FlagValues对象中。FlagValues对象可浏览命令行参数并传递flag参数到相应的Flag对象中进行值检查和类型转换,转换后的flag值可作为FlagValues对象的属性使用。
  • 通过FlagValues对象可进入一个flag,如flags.FLAGS.myflag。
  • __main__模块将命令行参数传递给flags.FLAGS进行解析。

<代码示例>

编写代码test.py

from absl import app
from absl import flags

FLAGS = flags.FLAGS #解析命令行参数,可帮助在不修改源码的情况下选择特定参数来运行程序

#接受任何输入并将其解释为字符串
flags.DEFINE_string('name', 'Jane Random', 'Your name.') 
#将输入解释为整数型,可选的参数lower_bound和upper_bound用于规定最小值和最大值;如果命令行中的数值超过此范围,则产生FlagError
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0) 
#将输入解释为浮点型,其他同EFINE_integer
flags.DEFINE_float("weight", None, "Your weight in kg.", lower_bound=0)
#通常不需要设置参数。True/Flase
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
#获取字符串列表,如果命令行中的值不在此列表中则报错。否则,会将此值赋值给FLAGS.flag
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.') #DEFINE_enum()函数()中各元素分别代表name,default,enum_values,help
#接受命令行上以逗号分隔的字符串列表,并将它们存储在Python列表对象中
flags.DEFINE_list("food", None, "Your favorite food")

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Hi', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))
  if FLAGS.weight is not None:
    print('Your weight is %d kg' % FLAGS.weight)
  if FLAGS.food is not None:
    print("Your favorite food(s): %s" % FLAGS.food)


if __name__ == '__main__':  
  app.run(main)

 执行test.py输出结果

~/tmp$ python test.py --name yaya --age=18 --weight=45 --debug=True --food apple,orange --job stopped
non-flag arguments: ['test.py']
Hi yaya
You are 18 years old, and your job is stopped
Your weight is 45 kg
Your favorite food(s): ['apple', 'orange']

 

posted @ 2023-01-13 23:39  yayagogogo  阅读(1265)  评论(0编辑  收藏  举报