我是否还应该用getopt(...)解析强制参数

时间:2011-07-31 20:16:03

标签: python

"""
Saves a dir listing in a file
Usage: python listfiles.py -d dir -f filename [flags]
Arguments:
  -d, --dir               dir; ls of which will be saved in a file
  -f, --file              filename (if existing will be overwritten)
Flags:
  -h, --help              show this help 
  -v, --verbose           be verbose
"""         

...

def usage():
  print __doc__

def main(args):
  verbose = False
  srcdir = filename = None
  try:
    opts, args = getopt.getopt(args,
                               'hvd:f:', ['help', 'verbose', 'dir=', 'file='])
  except getopt.GetoptError:
    usage()
    sys.exit(2)
  for opt, arg in opts:
    if opt in ('-h', '--help'):
      usage()
      sys.exit(0)
    if opt in ('-v', '--verbose'):
      verbose = True
    elif opt in ('-d', '--dir'):
      srcdir = arg
    elif opt in ('-f', '--file'):
      filename = arg
  if srcdir and filename:
    fsock = open(filename, 'w')
    write_dirlist_tosock(srcdir, fsock, verbose)
    fsock.close()
  else:
    usage()
    sys.exit(1)

if __name__ == '__main__':
  main(sys.argv[1:])  

我不确定使用getopt()来处理强制参数是否是pythonic。会很感激一些建议

2 个答案:

答案 0 :(得分:3)

getopt模块仅适用于那些已熟悉C中相同模块的用户,python标准参数处理为argparse

答案 1 :(得分:1)

“强制选项”是一个矛盾,并且通常不受各种选项解析库的良好支持;您应该考虑将强制参数作为位置参数放置,而不是由选项解析器解析,这会更好地符合常规练习。