问题标签 [optionparser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
26657 浏览

ruby - 如何生成 OptionParser 需要参数

下面的代码有效,但是fetch当我想将所需参数构建到所需参数的本机 OptionParser 语法中时,我使用 手动引发所需参数的参数错误:

0 投票
0 回答
904 浏览

python - Python:如何有效地对调用 OptionParser 的方法进行单元测试?

在我的 Python 单元测试(通过标准的鼻子测试/unittest.TestCase)中,我有一个类,我在其中创建了一个进行选项解析的方法。我想编写一个很好的单元测试例程来很好地练习它。

更重要的是,下面有 4 个问题,我正在寻找最佳的方法来做到这一点。... ?

所以这里的问题是:

  1. 我能断言什么有用的东西?

  2. 如何在不复制 OptionParser 骨架的情况下自动生成 MockOptionParser?

请注意,在 MockOptionParser 的 add_option 中,我不处理 'type' 关键字,但我应该处理。我确信我不会预测 OptionParser 使用的所有方法和关键字 args 并在 MockOptionParser 中实现它们。 有没有更简单的方法?

  1. 使用每个选项的自变量初始化 MockOptionParser 是丑陋的。有没有办法很好地做到这一点?

  2. 有没有一种简单的方法来验证所有 add_option() 变量(例如 options.debug)是否用于设置 self.debug 之类的东西?

0 投票
2 回答
1085 浏览

python - Python:如何从 OptionParser type='count' 记录.setLevel 的详细程度?

所以我想将日志记录添加到我一直在维护的一个小的内部命令行实用程序中。(实际上,我正在将其转换为相当难看的手动编码日志记录以使用 Python 的logging模块;并在此过程中清理一些缺陷)。

首先,我想保留现有的行为、缺陷和所有,以供遗留使用。任何可能依赖于它已经发出的无关警告的脚本都不应该因为我正在做的事情而中断。新功能应该通过-v开关实现,在 OptionParser 中实现为type=count(根据古老的 Unix/Linux 约定)。这里的问题是,单个-v将详细程度设置为 -1 到 0(零)......具有讽刺意味的是,至少抑制了来自 Paramiko 库的一条警告消息(找不到记录器“paramiko.transport”的处理程序)。从那里我想支持最多四个附加-v选项,并使用这些选项logging.setLevel()逐渐变得更详细,从logging.CRITICAL仅到logging.DEBUG.

问题来了!

我可以很容易地使用类似的东西:

换句话说,我将我的-v开关计数转换为十的倍数,然后从最不冗长的到最冗长的部分减去。(顺便说一下,这是 Python2.7.x)。

我注意到这logging.basicConfig()消除了“未找到句柄”警告,并暴露了一些潜在的错误消息,只要该实用程序投入生产(多年),这些错误消息就已经(无害地)发生。(所以,如果我按照预期从默认值 0 开始,那么我会向用户引入令人担忧的噪音。

但我的问题是:是否有更“正确”的方式将数字冗长设置转换为logging.setLevel()? 使用这个实现细节(与等相关的数值logging.CRITICAL, logging.ERROR, logging.WARN,...)似乎很脏。

当然,我不能成为唯一使用-vvvPython 标准OptionParserlogging模块的人。但是阅读文档和谷歌搜索并没有找到任何关于此的“最佳实践”。

0 投票
2 回答
223 浏览

ruby-on-rails - 为什么 Ruby OptionParser 不读取我的所有论点?

这是我的代码:

我的目标是有一个用逗号分隔的单独输入数组。但是,此代码仅输出第一个变量$filepath1

输出:

只是第一个变量filepath1

就是nil,什么时候应该是变量width1

任何建议或潜在的修复都会有所帮助,谢谢。

0 投票
1 回答
1076 浏览

ruby - 在 Ruby 中使用 OptionParse 强制强制命令行参数

我有这个代码:

如何强制设置-g参数?如果未指定,则触发使用消息,如-h调用参数时所示。

0 投票
1 回答
702 浏览

ruby - 使用 OptionParser 抑制短参数

我有一个带有一组相对广泛的命令行参数的 Ruby 应用程序。我想禁止一些选项的“短”变体,以便它们只能以长(“双破折号”)形式使用。

我可以以某种方式抑制某些选项的短破折号变体吗?

更新 2013/10/08

事实证明,确实省略了简短的变体!但是,对我来说不是,因为出于某种原因,在我的程序中,所有短键都以空格为前缀。所以一个像这样的简单案例:

导致异常:

而给出的建议(注意开场报价后没有空格):

工作正常。

因此,感谢p11y通过一个工作示例为我指明了正确的方向。此外,如果这个“前导空格”到位, optparse 不会抱怨 - 但它会改变你的短键的解释(或者,更好地说,会忽略它们并将它们显示为你的帮助热线的一部分! - 仍然请改用自动生成的密钥)。

0 投票
3 回答
7768 浏览

ruby - 不带参数的 OptionParse 显示横幅

我正在使用OptionParserRuby。

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

问题

  1. help如果没有传递参数( ) ,有没有办法设置默认显示消息ruby calc.rb
  2. 如果所需参数未给出或无效怎么办?假设length是一个 REQUIRED 参数并且用户不传递它或传递一些错误的东西,比如-l FOO
0 投票
5 回答
2027 浏览

ruby - 如何在 Ruby 中的 OptionParser 中仅使用长选项?

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

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

我错过了什么吗?

我想要唯一的--sort(长)选项,而不是短选项。

我如何得到它?

0 投票
1 回答
487 浏览

ruby - Ruby optparse 异常处理的奇怪行为

我正在努力使 CLI ruby​​ 工具更加健壮,并对工具的 CLI 组件进行错误处理。我正在使用 optparse 并且文档显示标志可以具有强制和可选参数。我只是看到一些奇怪/烦人的行为。

对于标志的参数是强制性的(使用等号)的一种情况,我试图让它失败但它仍然有效,它只是抓住了下一个标志('-u')作为该标志的参数,而不是导致其余的解析以不太理想的方式失败。我想这还不错,因为'-....' 可能是有效的,但是因为我使用等号来设置开关的值,所以我假设'space' 样式分配不起作用.

如果我通过以下 CLI 输入:

然后在解析过程中,它将 options[:user] 设置为 -d,并且 options[:db] 为 nil,因为它没有遇到并且有 2 个位置参数而不是 1。显然这是一个用户错误,但我想抓住它并显示一个真正的错误,而不仅仅是返回一个错误(在工具的情况下),应该从以下列表中只传递一个位置参数:......真正的问题是 -u 标志缺少它的必需参数所以鉴于 optparse 有一个 ArgumentMissing 异常,我假设这就是 .parse!会扔。

但是,对于具有可选参数(使用等号)的标志,如果您这样做,它实际上是可选的:-a -b=something 但这不起作用:-a something -b=somethingelse。强制该值的唯一方法是使用等号:-a=something -b=somethingelse。鉴于先前带有等号的强制性参数的行为,我认为不会是这种情况。例子:

所以通过解析:

那么 options[:user] 是 nil (ok) 并且 options[:db] 是 mydb 并且剩下一个位置参数。

通过此解析:

然后 options[:user] 为 nil (不正常), options[:db] 为 mydb 并且剩下两个位置参数:myuser 和 positionalarg (不正常)。我的错误检查再次与位置 arg 计数有关。似乎如果使用强制标志参数,如果空格和 = 都有效,那么对于可选标志参数,它应该是相同的,但事实并非如此。

另一个问题是带有可选参数(使用空格)的标志很好,除非它们位于命令的末尾,然后将位置参数作为标志参数。

例子:

所以通过解析:

然后 options[:db] 是 mydb (ok) 并且 options[:user] 是 positionalarg 并且没有剩余的位置参数。请注意, -d mydb 与空间一起使用,即使我用等号指定它也是如此。

似乎很多人通过执行 optparse .parse 来执行 ruby​​ CLI!并将 ARGV 中的剩余条目作为位置参数,但我认为在将 ARGV 传递给 optparse 之前先将位置参数从远端剥离可能会更好(除非在位置参数数量可变的情况下失败。

我相信我可以围绕所有这些进行编程,但如果我不知道在 optparse 中有方法可以做到这一点,我不希望这样做。

也许最好的办法是避免带有可选参数的标志:),但任何建议都会受到赞赏。

0 投票
2 回答
191 浏览

ruby - ruby 测试中的 optparse 为 webdriver 设置目标服务器

我需要让我的 webdriver 测试命中多个服务器。我的解决方案是传入命令行参数,但是在运行下面的代码时使用

ruby webdriver/e2e/*.rb -s=localhost

或者

ruby webdriver/e2e/*.rb --server=localhost

但我收到以下错误。我收到以下错误

测试.rb

更新

我变了

但它没有解决它