标签: optparse

如何让optparse的OptionParser忽略无效选项?

在python中__CODE__,我如何指示它忽略提供给方法的未定义选项__CODE__

例如,
我只__CODE__为我的__CODE__实例定义了选项,但我__CODE__用list 调用了
__CODE__

编辑:
我不在乎它是否将它们从原始列表中过滤掉.我只想忽略未定义的选项.

我这样做的原因是因为我使用SCons的AddOption接口来添加自定义构建选项.但是,其中一些选项指导了目标的声明.因此,我需要在脚本中的不同点解析sys.argv,而无需访问所有选项.最后,顶级Scons OptionParser将捕获命令行中的所有未定义选项.

python optparse

23
推荐指数
4
解决办法
1万
查看次数

OptionParser返回bool而不是参数?

当我从OptionParser文档中运行此示例时:

require 'optparse'
options = {}
OptionParser.new do |opts|
    opts.banner = "Usage: example.rb [options]"
    opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
        options[:verbose] = v
    end
end.parse!
p options
p ARGV
Run Code Online (Sandbox Code Playgroud)

并输入:ruby test.rb -v 100,它返回:

{:verbose=>true}
["100"]
Run Code Online (Sandbox Code Playgroud)

不应该是冗长的100,不是布尔值?

我不知道这个,有没有人有任何建议?

ruby optparse

19
推荐指数
1
解决办法
5508
查看次数

为什么字典中没有属性'__getitem__'错误?

为什么我没有__getitem__字典的属性错误:

Traceback (most recent call last):
  File "./thumbnail.py", line 39, in <module>
    main()
  File "./thumbnail.py", line 19, in main
    options['input_pattern']
AttributeError: Values instance has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

这是代码:

#!/usr/bin/env python

import os, sys, glob
from PIL import Image
from optparse import OptionParser

def batch_convert(src_dir, input_pattern, output_ext = None, dest_dir = None):
    return 0

def main():
    print sys.argv
    parser = OptionParser()
    parser.add_option("-s", "--source-dir", dest="src_dir", help="Source directory to fetch images")
    parser.add_option("-d", "--dest-dir", dest="dest_dir", help="Destination directory to writen processed images")
    parser.add_option("-i", …
Run Code Online (Sandbox Code Playgroud)

python dictionary optparse

16
推荐指数
2
解决办法
1万
查看次数

使用文件存储optparse参数

我现在一直在使用optparse,并希望添加从配置文件加载参数的功能.

到目前为止,我能想到的最好的是一个带有硬编码参数的包装批处理脚本......看起来很笨拙.

这样做最优雅的方法是什么?

python optparse

15
推荐指数
2
解决办法
5045
查看次数

我如何模拟Python方法OptionParser.error(),它执行sys.exit()?

我正在尝试单元测试一些看起来像这样的代码:

def main():
    parser = optparse.OptionParser(description='This tool is cool', prog='cool-tool')
    parser.add_option('--foo', action='store', help='The foo option is self-explanatory')
    options, arguments = parser.parse_args()
    if not options.foo:
        parser.error('--foo option is required')
    print "Your foo is %s." % options.foo
    return 0

if __name__ == '__main__':
   sys.exit(main())
Run Code Online (Sandbox Code Playgroud)

使用如下代码:

@patch('optparse.OptionParser')
def test_main_with_missing_p4clientsdir_option(self, mock_optionparser):
    #
    # setup
    #
    optionparser_mock = Mock()
    mock_optionparser.return_value = optionparser_mock
    options_stub = Mock()
    options_stub.foo = None
    optionparser_mock.parse_args.return_value = (options_stub, sentinel.arguments)
    def parser_error_mock(message):
        self.assertEquals(message, '--foo option is required')
        sys.exit(2)
    optionparser_mock.error = parser_error_mock

    #
    # …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking optparse

14
推荐指数
2
解决办法
4067
查看次数

optparse描述中的ASCII艺术

我正在使用optparse模块创建一个shell脚本,jut是为了好玩,所以我想打印一个漂亮的ascii绘图来代替描述.

原来这个代码:

parser = optparse.OptionParser(
    prog='./spill.py',
    description=u'''
  /     \                                     
  vvvvvvv  /|__/|                             
      I   /O,O   |                            
      I /_____   |      /|/|                 
     J|/^ ^ ^ \  |    /00  |    _//|          
      |^ ^ ^ ^ |W|   |/^^\ |   /oo |         
       \m___m__|_|    \m_m_|   \mm_|         
''',
    epilog='''
        Las cucarachas lograron con exito su plan, echando a los pestilentes sangre caliente de sus cajas de cemento. 
Ahora el hombre es una especie errante en el espacio, un vagabundo errante en las estrellas.''')
Run Code Online (Sandbox Code Playgroud)

渲染如下:

$ ./bin/spill.py -h
Usage: ./spill.py …
Run Code Online (Sandbox Code Playgroud)

python optparse ascii-art

14
推荐指数
2
解决办法
1720
查看次数

使用optparse将stdin和stdout重定向到python中的文件的一致方法

我有十几个可以通过stdin或选项接受输入的程序,我想以类似的方式为输出实现相同的功能.

optparse代码如下所示:

parser.add_option('-f', '--file',
       default='-',
       help='Specifies the input file.  The default is stdin.')
parser.add_option('-o', '--output',
       default='-',
       help='Specifies the output file.  The default is stdout.')
Run Code Online (Sandbox Code Playgroud)

其余适用的代码如下所示:

if opts.filename == '-':
    infile = sys.stdin
else:
    infile = open(opts.filename, "r")

if opts.output == '-':
    outfile = sys.stdout
else:
    outfile = open(opts.output, "w")
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,我喜欢它的简单性 - 但是我无法找到任何使用默认值' - '表示stdout的人的引用.这是一个很好的一致解决方案还是我忽略了更好或更期望的事情?

python stdin stdout optparse

13
推荐指数
2
解决办法
6389
查看次数

使用Python的optparse模块,如何创建一个带有可变数量参数的选项?

使用Perl,Getopt::Long您可以轻松定义带有可变数量参数的命令行选项:

foo.pl --files a.txt             --verbose
foo.pl --files a.txt b.txt c.txt --verbose
Run Code Online (Sandbox Code Playgroud)

有没有办法直接使用Python的optparse模块?据我所知,nargsoption属性可用于指定固定数量的选项参数,我还没有在文档中看到其他替代方法.

python optparse

12
推荐指数
3
解决办法
9634
查看次数

OptionParser可以跳过未知选项,稍后在Ruby程序中处理吗?

有没有办法在一个Ruby程序中多次启动OptionParser,每个程序都有不同的选项?

例如:

$ myscript.rb --subsys1opt a --subsys2opt b
Run Code Online (Sandbox Code Playgroud)

在这里,myscript.rb将使用subsys1和subsys2,将它们的选项处理逻辑委托给它们,可能是首先处理'a'的序列,然后是单独的OptionParser对象中的'b'; 每次选择仅与该上下文相关的选项.最后阶段可以检查在每个部件处理完他们之后没有任何未知数.

用例是:

  1. 在松散耦合的前端程序中,各种组件具有不同的参数,我不希望'main'知道所有内容,只是为每个部分委派参数/选项集.

  2. 将一些更大的系统(如RSpec)嵌入到我的应用程序中,我只需通过命令行通过他们的选项,而不知道那些包装器.

我会用一些分隔符选项OK,以及像----vmargs在某些Java应用程序.

在Unix世界中有许多类似的东西的实际例子(startx/X,git plumbing和瓷器),其中一层处理一些选项但将其余部分传播到下层.

开箱即用,这似乎不起作用.每次OptionParse.parse!通话都会进行详尽的处理,对任何不知道的事情都会失败.我想我很乐意跳过未知选项.

任何提示,也许是替代方法都是受欢迎的.

ruby options getopt optparse

12
推荐指数
2
解决办法
6200
查看次数

禁用argparse和optparse的唯一前缀匹配

当我使用Python的argparse或optparse命令行参数解析器时,参数的任何唯一前缀都被认为是有效的,例如

$ ./buildall.py --help
usage: buildall.py [-h] [-f]

Build all repositories

optional arguments:
  -h, --help   show this help message and exit
  -f, --force  Build dirty repositories
Run Code Online (Sandbox Code Playgroud)

作品有--help,--hel,--he的帮助选项,以及--forc--fo为强制选项.

可以以某种方式关闭此行为吗?我想获得不完整参数的错误消息.

python optparse argparse

12
推荐指数
2
解决办法
1604
查看次数