Python optparse不适合我

时间:2010-04-21 16:27:50

标签: python optparse

我目前正在学习如何使用Python optparse模块。我正在尝试以下示例脚本,但args变量为空。我尝试使用Python 2.5和2.6,但无济于事。

import optparse

def main():
  p = optparse.OptionParser()
  p.add_option('--person', '-p', action='store', dest='person', default='Me')
  options, args = p.parse_args()

  print '\n[Debug]: Print options:', options
  print '\n[Debug]: Print args:', args
  print

  if len(args) != 1:
    p.print_help()
  else:
    print 'Hello %s' % options.person

if __name__ == '__main__':
  main() 

输出:

>C:\Scripts\example>hello.py -p Kelvin

[Debug]: Print options: {'person': 'Kelvin'}

[Debug]: Print args: []

Usage: hello.py [options]

选项:   -h, - help显示此帮助消息并退出   -p PERSON, - Person = PERSON

4 个答案:

答案 0 :(得分:7)

args变量包含未分配给选项的任何参数。通过将Kelvin分配给person选项变量,您的代码确实正常运行。

如果您尝试运行hello.py -p Kelvin file1.txt,您会发现仍然为person分配了值"Kelvin",然后您的args将包含"file1.txt"。< / p>

另见the documentation on optparse

  

parse_args()返回两个值:

     
      
  • options,一个包含所有选项值的对象 - 例如。如果--file采用单个字符串参数,则options.file将是用户提供的文件名,如果用户未提供该选项,则为None
  •   
  • args,解析选项后剩余的位置参数列表
  •   

答案 1 :(得分:1)

根据optparse帮助:

“成功时返回一对(values,args),其中'values'是一个Values实例(包含所有选项值),'args'是解析选项后左上的参数列表。“

尝试hello.py -p Kelving abcd - '开尔文'将由optparse解析,'abcd'将落在args

返回的parse_args变量中

答案 2 :(得分:0)

注意:“选项”是包含您添加的选项的字典。 “Args”是一个包含未解析参数的列表。你不应该看长度“args”。这是一个说明的成绩单:

moshez-mb:profile administrator$ cat foo
import optparse

def main():
    p = optparse.OptionParser()
    p.add_option('--person', '-p', action='store', dest='person', default='Me')
    options, args = p.parse_args()
    print '\n[Debug]: Print options:', options
    print '\n[Debug]: Print args:', args
    print
    if len(args) != 1:
        p.print_help()
    else:
        print 'Hello %s' % options.person

if __name__ == '__main__':
    main()
moshez-mb:profile administrator$ python foo

[Debug]: Print options: {'person': 'Me'}

[Debug]: Print args: []

Usage: foo [options]

Options:
  -h, --help            show this help message and exit
  -p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe

[Debug]: Print options: {'person': 'Moshe'}

[Debug]: Print args: []

Usage: foo [options]

Options:
  -h, --help            show this help message and exit
  -p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe argument

[Debug]: Print options: {'person': 'Moshe'}

[Debug]: Print args: ['argument']

Hello Moshe
moshez-mb:profile administrator$ 

答案 3 :(得分:0)

import ast

(options, args) = parser.parse_args()
noargs = ast.literal_eval(options.__str__()).keys()
if len(noargs) != 1:
    parser.error("ERROR: INCORRECT NUMBER OF ARGUMENTS")
    sys.exit(1)