标签: optionparser

如何使用Ruby OptionParser指定所需的开关(而不是参数)?

我正在写一个脚本,我想要一个--host带有值的开关,但是如果--host没有指定开关,我希望选项解析失败.

我似乎无法弄清楚如何做到这一点.文档似乎只指定了如何使参数值成为必需参数,而不是交换机本身.

ruby arguments optionparser

47
推荐指数
5
解决办法
4万
查看次数

使用ruby的OptionParser来解析子命令

我希望能够使用ruby的OptionParser来解析表单的子命令

COMMAND [GLOBAL FLAGS] [SUB-COMMAND [SUB-COMMAND FLAGS]]
Run Code Online (Sandbox Code Playgroud)

喜欢:

git branch -a
gem list foo
Run Code Online (Sandbox Code Playgroud)

我知道我可以切换到一个不同的选项解析器库(如Trollop),但我有兴趣从OptionParser中学习如何做到这一点,因为我想更好地学习库.

有小费吗?

ruby optparse optionparser

24
推荐指数
1
解决办法
6409
查看次数

如何生成OptionParser需要参数

下面的代码可以工作,但是fetch当我想在本机OptionParser sytax中为所需参数构建所需的参数时,我会手动提高所需参数的参数错误:

# ocra script.rb -- --type=value
options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"

  opts.on("--type [TYPE]",String, [:gl, :time], "Select Exception file type (gl, time)") do |t|
    options["type"] = t
  end

  opts.on("--company [TYPE]",String, [:jaxon, :doric], "Select Company (jaxon, doric)") do |t|
    options["company"] = t
  end

end.parse!

opts = {}
opts['type'] = options.fetch('type') do
  raise ArgumentError,"no 'type' option specified  as a parameter (gl or time)"
end

opts['company'] = options.fetch('company') do
  raise ArgumentError,"no 'company' option specified  as …
Run Code Online (Sandbox Code Playgroud)

ruby optionparser

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

没有参数的OptionParse显示横幅

我正在使用OptionParserRuby.

我有其他语言,如C,Python等,有类似的命令行参数解析器,它们通常提供一种在没有提供参数或参数错误时显示帮助消息的方法.

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: calc.rb [options]"

  opts.on("-l", "--length L", Integer, "Length") { |l| options[:length] = l }
  opts.on("-w", "--width W", Integer, "Width") { |w| options[:width] = w }

  opts.on_tail("-h", "--help", "Show this message") do
    puts opts
    exit
  end
end.parse!
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 有没有办法设置默认显示help消息如果没有传递参数(ruby calc.rb)?
  2. 如果没有给出或无效的必要参数怎么办?假设length是一个REQUIRED参数,用户不传递它或传递错误,如-l FOO

ruby optionparser

18
推荐指数
1
解决办法
6257
查看次数

如何在Ruby OptionParser中处理缺少的强制参数?

在OptionParser中,我可以强制选择一个选项,但是如果我省略该值,它将使用任何后续选项的名称作为值,从而搞砸了命令行解析的其余部分.这是一个回答选项值的测试用例:

$ ./test_case.rb --input foo --output bar
output  bar
input  foo
Run Code Online (Sandbox Code Playgroud)

现在省略第一个选项的值:

$ ./test_case.rb --input  --output bar
input  --output
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止它将另一个选项名称作为值?谢谢!

这是测试用例代码:

#!/usr/bin/env ruby
require 'optparse'
files = Hash.new

option_parser = OptionParser.new do |opts|
  opts.on('-i', '--input FILENAME', 'Input filename - required') do |filename|
    files[:input] = filename
  end
  opts.on('-o', '--output FILENAME', 'Output filename - required') do |filename|
    files[:output] = filename
  end
end

begin
  option_parser.parse!(ARGV)
rescue OptionParser::ParseError
  $stderr.print "Error: " + $! + "\n"
  exit
end

files.keys.each do |key|
  print "#{key}  #{files[key]}\n"
end
Run Code Online (Sandbox Code Playgroud)

ruby command-line optionparser

17
推荐指数
2
解决办法
7155
查看次数

具有多个标记的boost :: program_options配置文件选项

我似乎无法从命令行中读取配置文件多音色选项.配置文件的语法是什么?

这是添加选项描述的方式:

//parser.cpp
- - -
po::options_description* generic;
generic=new po::options_description("Generic options");
generic->add_options()
("coordinate",po::value<std::vector<double> >()->multitoken(),"Coordinates (x,y)");
Run Code Online (Sandbox Code Playgroud)

之后我解析命令和配置文件.

在命令行'--coordinate 1 2'工作.但是,当我尝试配置文件时:

coordinate = 1,2
Run Code Online (Sandbox Code Playgroud)

要么

coordinate= 1 2
Run Code Online (Sandbox Code Playgroud)

它没有给出invalid_option_value异常.那么多语言选项的配置文件的语法究竟是什么?

c++ syntax boost-program-options optionparser config-files

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

OptionParser与狮身人面像有冲突吗?

我正在尝试在sphinx中为我的项目编写文档,每当sphinx在我的模块中遇到OptionParser时,它就会给我:

sphinx-build: error: no such option: -b
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的,所以我写了一个简单的模块来检查:

from optparse import OptionParser

"""some comment here"""

parser = OptionParser(conflict_handler='resolve')
parser.add_option('', '--force', action='store_true', dest='force', default=False, help='gqdel will skip asking questions, and delete them all.');
parser.add_option('', '--verbose', action='store_true', dest='verbose', default=False, help='Report additional information from gqdel')

(options, args) = parser.parse_args()

"""and here"""

print "foo"
Run Code Online (Sandbox Code Playgroud)

它给了我同样的错误.我的第一个看起来像这样:

some title
==========

.. automodule:: test
   :members:
Run Code Online (Sandbox Code Playgroud)

python optionparser python-sphinx

11
推荐指数
2
解决办法
2188
查看次数

了解OptionParser

我正在尝试optparse,这是我的初始脚本.

#!/usr/bin/env python

import os, sys
from optparse import OptionParser

parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-d", "--dir", type="string",
                  help="List of directory",
                  dest="inDir", default=".")

parser.add_option("-m", "--month", type="int",
                  help="Numeric value of the month", 
                  dest="mon")

options, arguments = parser.parse_args()

if options.inDir:
    print os.listdir(options.inDir)

if options.mon:
    print options.mon

def no_opt()
    print "No option has been given!!"
Run Code Online (Sandbox Code Playgroud)

现在,这就是我要做的事情:

  1. 如果没有给出该选项的参数,它将采用"默认"值.即myScript.py -d只列出当前目录或-m没有任何参数将当前月份作为参数.
  2. 对于"--month",只允许01到12作为参数
  3. 想要结合多个选项来执行不同的任务,即myScript.py -d this_dir -m 02与-d和-m作为个体做不同的事情.
  4. 只有在脚本没有提供选项的情况下,它才会打印" 没有选项! ".

这些可行吗?我确实访问了doc.python.org网站以获得可能的答案,但作为一个蟒蛇初学者,我发现自己迷失在页面中.非常感谢你的帮助; 提前致谢.干杯!!


更新:16/01/11 …

python optparse optionparser

10
推荐指数
1
解决办法
6万
查看次数

如何在ruby的OptionParser中使用变量参数

我不太了解ruby,但我正在尝试为这个脚本添加一些功能,一位同事写道.

基本上现在它需要一些标志和标准作为输入,它使用OptionParser来解析标志.

我想使用OptionParser来解析一系列类似于cat的命令行参数.所以我想我的问题是如何编写命令行选项,使用OptionParser解析ruby中cat的一部分

cat [OPTION]... [FILE]...
Run Code Online (Sandbox Code Playgroud)

希望有意义,任何帮助都表示赞赏.

ruby optionparser

8
推荐指数
1
解决办法
7587
查看次数

如何在Ruby中的OptionParser中只获取长选项?

我在Ruby中有这么简单的代码(test.rb):

#! /usr/bin/env ruby

require 'optparse'

OptionParser.new do |option|
  option.on("--sort", "Sort data") do 
    puts "--sort passed"
  end
end.parse!
Run Code Online (Sandbox Code Playgroud)

然后我运行它:./test.rb -s得到:

--sort passed
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

我希望唯一--sort(长)选项有效,而不是短选项.

我怎么得到它?

ruby optionparser

6
推荐指数
1
解决办法
1573
查看次数