星期五, 1月 13, 2012

Python gflags

Google有一個叫python-gflags的project, 可以很方便地幫助讀取參數. 使用方法如下.

  • 安裝方法
    • sudo easy_install --upgrade python-gflags
  • 參數種類
    • string: 將參數解讀為字串
    • bool/boolean: 值可以是0/1, false/true, f/t
    • float: 將參數解釋為floating point number. 有兩個optional參數, 可以指定上下限
    • integer: 將參數解釋為integer. 有兩個optional參數, 可以指定上下限
    • enum: 如果輸入參數在預先設好的這個list裡, 為合法輸入, 否則會發出exception.
    • list: 以逗號隔開的一組輸入字串
    • spaceseplist: 以space隔開的一組輸入字串
    • multistring: 還看不太懂怎麼用.
    • multi_int: 還看不太懂怎麼用.
  • 使用方法
import gflags
FLAGS = gflags.FLAGS
# string, 參數意義為"參數名", 預設值, 說明
gflags.DEFINE_string('client_id', None, 'Client Id for authentication.')
gflags.DEFINE_string('client_secret', None, 'Client secret for authentication.')
gflags.DEFINE_integer('age', None, 'your age in years', lower_bound=0)
gflags.DEFINE_boolean('debug', False, 'produces debugging output')
gflags.DEFINE_enum('gender', 'male', ['male', 'female'], 'your gender')
# 設為required field
gflags.MarkFlagAsRequired('client_id')
gflags.MarkFlagAsRequired('client_secret')
def main(argv):
    try:
        argv = FLAGS(argv)
    except gflags.FlagsError e:
        print '%s\\nUsage: %s ARGS\\n%s' % (e, sys.argv[0], FLAGS)
        sys.exit(1)
    # you can use FLAGS.debug, FLAGS.age, FLAGS.client_id... here
if __name__ == '__main__':
    main(sys.argv)

4 則留言:

Wei Li 提到...

Good! Just wrote a very similar thing based on getopt. Now I am going to give up my code:)

Wei Li 提到...

http://limijd.blogspot.com/2012/01/python-gflags.html

lihang.lin 提到...

why not argparse ?

Mac Wang 提到...

argparse is new in Python 3.2?
http://docs.python.org/dev/library/argparse.html