Python optparse 不适合我

发布于 2024-08-30 05:50:44 字数 737 浏览 3 评论 0原文

我目前正在学习如何使用 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 人,--人=人

I'm currently learning on how to use the Python optparse module. I'm trying the following example script but the args variable comes out empty. I tried this using Python 2.5 and 2.6 but to no avail.

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() 

Output:

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

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

[Debug]: Print args: []

Usage: hello.py [options]

Options:
-h, --help show this help message and exit
-p PERSON, --person=PERSON

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦初启 2024-09-06 05:50:44

args 变量保存未分配给选项的任何参数。通过将 Kelvin 分配给 person 选项变量,您的代码确实可以正常工作。

如果您尝试运行hello.py -p Kelvin file1.txt,您会发现person仍然被分配了值“Kelvin”,并且那么你的args将包含“file1.txt”

另请参阅有关optparse的文档

parse_args() 返回两个值:

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

The args variable holds any arguments that were not assigned to an option. Your code is indeed working properly by assigning Kelvin to the person option variable.

If you tried running hello.py -p Kelvin file1.txt, you would find that person still was assigned the value "Kelvin", and then your args would contain "file1.txt".

See also the documentation on optparse:

parse_args() returns two values:

  • options, an object containing values for all of your options—e.g. if --file takes a single string argument, then options.file will be the filename supplied by the user, or None if the user did not supply that option
  • args, the list of positional arguments leftover after parsing options
财迷小姐 2024-09-06 05:50:44

根据 optparse 帮助:

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

尝试 hello.py -p Kelving abcd - 'Kelvin' 将由 optparse 解析,'abcd' 将落在 parse_args 返回的 args 变量中

According to optparse help:

"On success returns a pair (values, args) where 'values' is an Values instance (with all your option values) and 'args' is the list of arguments left over after parsing options."

Try hello.py -p Kelving abcd - 'Kelvin' will be parsed by optparse, 'abcd' will land in args variable returned by parse_args

自找没趣 2024-09-06 05:50:44

注意:“选项”是包含您添加的选项的字典。 “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$ 

Note: "options" is a dictionary with the options you added. "Args" is a list with the unparsed arguments. You should not be looking at length "args". Here is a transcript to illustrate:

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$ 
爱*していゐ 2024-09-06 05:50:44
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)
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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文