2011-02-18 21 views
11

我在编写脚本时遇到了这个getopt()代码的问题,它在给出2个必需参数(输入文件名和输出文件名)和/或2个可选/情景参数(调试或帮助)的情况下执行一些简单的文件操作。getopt()不强制执行所需的参数?

代码是:

def main(argv): 
    try: 
     opts, args = getopt.getopt(argv, "i:o:dh", ["input-file=", "output-file=", "debug", "help"]) 
    except getopt.GetoptError: 
     usage() 
     sys.exit(2) 

    for opt, arg in opts: 
     if opt in ("-h", "--help"): 
      usage() 
      sys.exit() 
     elif opt in ("-d", "--debug"): 
      global _debug 
      _debug = 1 
     elif opt in ("-i", "--input-file"): 
      u_input_file_name = arg 
     elif opt in ("-o", "--output-file"): 
      u_output_file_name = arg 

按照getopt()文档:需要一个参数跟一个冒号( ':'

选项;即,相同的格式的Unix getopt的()使用)。

的问题是,我的理解是,变量/ ARGS接着是:应根据需要强制执行......但选项io不被执行。运行这段代码加纳斯约u_input_file_name错误被分配之前被引用:

[[email protected] ~/python]$ ./inco_add_cm_mpscli.py -o google 
Traceback (most recent call last): 
    File "./inco_add_cm_mpscli.py", line 57, in <module> 
    main(sys.argv[1:]) 
    File "./inco_add_cm_mpscli.py", line 25, in main 
    infile = open(u_input_file_name, 'r') 
UnboundLocalError: local variable 'u_input_file_name' referenced before assignment 

我在做什么错?

回答

16

后跟一个冒号的选项只意味着它需要一个参数。这并不意味着该选项是强制执行的。你应该编写你自己的代码来强制选择/参数的存在。

+0

什么的划定方案的目的如果要求没有得到处理,**需要**吗? – 2011-02-18 19:52:40

2

正如一个音符,我发现argparse简单有用的getopt的,它支持所需的argumennts

http://docs.python.org/2/howto/argparse.html#id1

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument("echo", help="echo the string you use here") 
args = parser.parse_args() 

命令行

$ python prog.py 
usage: prog.py [-h] echo 
prog.py: error: the following arguments are required: echo