Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python optparse不适合我_Python_Optparse - Fatal编程技术网

Python optparse不适合我

Python optparse不适合我,python,optparse,Python,Optparse,我目前正在学习如何使用Python optparse模块。我正在尝试下面的示例脚本,但是args变量为空。我使用Python2.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(

我目前正在学习如何使用Python optparse模块。我正在尝试下面的示例脚本,但是args变量为空。我使用Python2.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、 --帮助显示此帮助消息并退出
-p PERSON,--PERSON=PERSON

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

如果您尝试运行
hello.py-p Kelvin file1.txt
,您会发现
person
仍然被分配值
“Kelvin”
,然后您的
参数将包含
“file1.txt”

另见:

parse_args()
返回两个值:

  • options
    ,一个包含所有选项值的对象,例如,如果
    --file
    采用单个字符串参数,则
    options.file
    将是用户提供的文件名,如果用户未提供该选项,则
    None
  • args
    ,解析选项后剩余的位置参数列表
注意:“选项”是一个包含您添加的选项的字典。“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$ 

根据
optpass
帮助:

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


请尝试
hello.py-p Kelving abcd
-“Kelvin”将由optpasse解析,“abcd”将降落在
args
parse\u args

返回的变量中。哦,我明白了。我阅读了帮助文档,但我想我必须仔细阅读才能完全理解。谢谢哇,第一次来这里,我得到了一个快速的回复。你应该选择一个答案,这样人们就会知道你是值得信赖的,下次你也会得到快速的回复!我不确定ast模块是否与args变量为何为空有关。参数的数量不正确,只是分配方式不同。请告诉我代码有什么问题。顺便说一句,这是一个解决方法…我无法使len(args)使其工作…不确定我是否遗漏了一些内容。它没有解决问题,海报问为什么
args
为空。答案是args应该为空,因为
optparser
就是这样工作的。您的代码将添加
'person'
键并显示它,但这不是这里应该发生的事情。
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)