我正在写一个脚本,我想要一个--host带有值的开关,但是如果--host没有指定开关,我希望选项解析失败.
我似乎无法弄清楚如何做到这一点.文档似乎只指定了如何使参数值成为必需参数,而不是交换机本身.
我希望能够使用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中学习如何做到这一点,因为我想更好地学习库.
有小费吗?
下面的代码可以工作,但是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) 我正在使用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)
问题:
help消息如果没有传递参数(ruby calc.rb)?length是一个REQUIRED参数,用户不传递它或传递错误,如-l FOO?在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) 我似乎无法从命令行中读取配置文件多音色选项.配置文件的语法是什么?
这是添加选项描述的方式:
//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异常.那么多语言选项的配置文件的语法究竟是什么?
我正在尝试在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) 我正在尝试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)
现在,这就是我要做的事情:
myScript.py -d只列出当前目录或-m没有任何参数将当前月份作为参数.myScript.py -d this_dir -m 02与-d和-m作为个体做不同的事情.这些可行吗?我确实访问了doc.python.org网站以获得可能的答案,但作为一个蟒蛇初学者,我发现自己迷失在页面中.非常感谢你的帮助; 提前致谢.干杯!!
我不太了解ruby,但我正在尝试为这个脚本添加一些功能,一位同事写道.
基本上现在它需要一些标志和标准作为输入,它使用OptionParser来解析标志.
我想使用OptionParser来解析一系列类似于cat的命令行参数.所以我想我的问题是如何编写命令行选项,使用OptionParser解析ruby中cat的一部分
cat [OPTION]... [FILE]...
Run Code Online (Sandbox Code Playgroud)
希望有意义,任何帮助都表示赞赏.
我在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(长)选项有效,而不是短选项.
我怎么得到它?
optionparser ×10
ruby ×7
optparse ×2
python ×2
arguments ×1
c++ ×1
command-line ×1
config-files ×1
syntax ×1