2011-07-31 45 views
1
""" 
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:]) 

我不确定是否pythonic使用getopt()也可以处理强制参数。希望得到一些建议我是否还需要用getopt解析强制性参数(...)

+9

我可以推荐[argparse](http://docs.python.org/library/argparse.html)。 –

+0

另外检查plac(更简单):http://pypi.python.org/pypi/plac –

回答

3

getopt模块只对那些谁已经熟悉C,同一模块Python标准参数处理是argparse用户。

1

“强制选项”是一个矛盾,并且通常不被各种选项解析库支持;您应该考虑将强制性参数作为位置参数,而不是由选项解析器进行分析,这与常用实践相符得多。

+0

是的!这正是我的问题,我想我会编辑标题。您能否详细说明“在执行解析器时考虑将强制参数作为位置参数” –

+0

,通常返回一个2-tuple,第一项是解析的选项,第二项是解析器参数的* rest *没有认出。这些被称为位置参数,并且按照特定顺序期望它们的某种组合是典型的。 – SingleNegationElimination

相关问题