如何使用 Trollop 制作 Ruby 脚本进行命令行解析? [关闭]

2023-12-03

我最近开始使用Trollop,一个干净而优雅的命令行选项解析器,适用于我所有基于 Ruby 的小型命令行 hack。我发现它确实很容易使用,但入门很困难:尽管有很好的在线文档,但没有任何内容展示如何将 Trollop 合并到完整的脚本中。

问:如何将 Trollop 合并到我的 Ruby 命令行程序中?


答:这是一个独立的例子。

业务与if __FILE__ == $0不是特罗洛普特有的;这只是意味着“如果该文件作为脚本执行,则运行以下代码”。该技术允许您将文件用作库模块,将业务逻辑与命令行解析分开。

#!/usr/bin/env ruby
# 
# This is a near-minimal ruby script to demonstrate trollop, a simple
# and elegant command-line parsing package.  To run, copy this file to
# 'trollop_demo.rb' and make it executable by
#   $ chmod +x trollop_demo.rb
# Then run it via:
#   $ ./trollop_demo.rb <your args here>
# For more info on Trollop, see http://trollop.rubyforge.org/
require 'trollop'

# A trivial program...
def main_method(filename, options)
  puts("filename = #{filename}, options = #{options}")
end

# Execute this part when the file is run as a script
if __FILE__ == $0
  opts = Trollop::options do
    version "#{$0} Version 3.14159 (C) 2041 Spacely Sprockets, Inc."
    banner <<-EOS
#{$0} is a command-line program to demonstrate trollop
Usage:
        #{$0} [options] <filename>
where [options] are zero or more of:
EOS
    opt :verbose, "Print extra information."
    opt :dry_run, "Don't actually do anything.", :short => "-n"
  end
  filename = ARGV.shift
  if (filename.nil?) || (!File.exist?(filename))
    Trollop::die "filename must be given and name an existing file"
  else
    main_method(filename, opts)
  end
end

只需一点代码,您现在就可以尝试所有这些操作:

$ ./trollop_demo.rb 
$ ./trollop_demo.rb a_file_that_doesn't_exist
$ ./trollop_demo.rb --version
$ ./trollop_demo.rb --help
$ ./trollop_demo.rb trollop_demo.rb
$ ./trollop_demo.rb --dry-run trollop_demo.rb
$ ./trollop_demo.rb --no-dry-run trollop_demo.rb
$ ./trollop_demo.rb --verbose trollop_demo.rb
$ ./trollop_demo.rb -v trollop_demo.rb

有关更多信息,请参阅http://trollop.rubyforge.org/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Trollop 制作 Ruby 脚本进行命令行解析? [关闭] 的相关文章

  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • 将“Authorization Bearer”哈希添加到 Net::HTTP post 请求 (Ruby)

    我怎样才能添加Authorization Bearer到 POST 请求Net HTTP 我只能在文档中找到 基本身份验证 的帮助 req basic auth user pass Source https docs ruby lang o
  • Ruby on Rails 离线编程

    我将离开互联网几周 但仍然想完成一个项目 我应该采取哪些步骤来确保在断开连接时能够访问我需要的内容 ruby 和 ROR 离线时 以下内容很难获得 gems docs Rails 专家博客 堆栈溢出 so gem 安装尽可能多 下载所有的轨
  • Django管理命令是在单独的进程中执行的吗?

    Django 有很多管理命令 此外 我们还可以编写自己的命令 进行 shell 调用后会发生什么python manage py XXX 代码是否会在从 shell 启动的进程中执行 或者 shell 进程只是与执行命令的主 Django
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • HMC SHA1 哈希 - C# 生成与 Ruby 不同的哈希输出

    我正在尝试为我正在使用的第三方服务快速获取一个有缺陷的 Net 客户端库 原始库 可以运行 是用 Ruby 编写的 但 DotNet 的等效库会向 Ruby 库生成不同的哈希输出 Ruby加密代码如下 def self encrypt st
  • SVN 提交后挂钩在提交后不会运行

    我的服务器上设置了 SVN 存储库 并且遇到提交后问题 我在 iMac 上使用 SmartSVN 作为客户端 我通过 SmartSVN 的 ssh svn 连接 我能够成功连接到 SVN 并对其进行更改 但从 SVN 客户端提交后 我的提交
  • RSpec 2 中使用 OR 相等

    下面这个例子的正确写法是什么 玩家的分数应等于 5 或 8 it should equal 5 or 8 do player score should 5 or 8 end Thanks Tim 5 or 8将始终产生结果 5 并且不会执行
  • ubuntu 12.04 ruby​​ 2.0 Rails:找不到“thread_safe”

    我正在 ubuntu 12 04 上安装 Rails 使用以下方法手动安装 如何在 Ubuntu 12 04 上正确安装 ruby 2 0 0 https stackoverflow com questions 16222738 how t
  • 对范围值进行排序

    我想对表示数值范围的字符串数组进行排序 如下所示 b 0 5 100 250 5 25 50 100 250 500 25 50 使用sort我得到的方法 b sort gt 0 5 100 250 25 50 250 500 5 25 5
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 正常关闭 sidekiq 进程

    有谁知道如何找到 sidekiq 的 pidfile 来优雅地关闭它 跑步ps ax grep sidekiq然后运行sidekiqctl stop
  • 用于获取下周一(或一周中的任何一天)的日期的 Ruby 代码

    给定一个输入 例如 day Monday 我如何计算下一次的日期day def date of next day end require date def date of next day date Date parse day delta
  • 如何从数组中提取特定元素?

    如果我有一个数组a 1 2 3 4 5 6 7 8 9 10 我想要这个数组的一个子集 第 1 个 第 5 个和第 7 个元素 是否可以通过简单的方式从该数组中提取这些内容 我在想这样的事情 a 0 4 6 1 5 7 但这行不通 还有一种
  • 如何使 Yard `@macro` 应用于多个文件

    如果我有在one file下列 module Something class Resource Defines a new property param String name the property name param Class t
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find
  • 测试 bash shell 脚本[重复]

    这个问题在这里已经有答案了 有人可以解释一下如何测试 bash shell 脚本吗 例如 我有一个 sh 文件 其中包含此代码 bin sh for file in txt do mv file basename file txt doc

随机推荐

  • 将 ORB 特征与阈值进行匹配

    我的项目是基于android的草药识别 我使用 ORB 来获取关键点 特征并匹配特征 我想使用这个算法 我使用 4 个参考图像 并将它们的特征 image1 与 image1 1 2 1 3 1 4 2 3 3 4 进行匹配 然后我将到数据
  • SQL Server Express 4GB 限制

    简单问题 4GB 限制是针对每个数据库还是针对已安装的 SQL Server 实例 如您所知 您可以在 SQL Server 实例中创建多个数据库 每个数据库的大小限制为 4GB
  • 控制范围和预测范围

    我已经回顾了模型预测控制的参考书目和 Gekko 编程结构 尽管我了解它的编程方式及其目的 例如 我想了解 Gekko 如何根据 Seborg 中的相关内容来管理控制范围和预测范围之间的差异 我看不出代码有什么区别 下面是一个用于说明的 M
  • Socket_read() 说“不是有效的资源”

    我正在学习套接字编程并尝试使用 php 我想使用客户端连接到套接字服务器并从客户端读取服务器的响应 代码 服务器 php address 127 0 0 1 port 3343 echo I am here set time limit 0
  • 将枚举列表传递给条件

    我有域名 付款 class Payment String name PaymentType paymentType PaymentType 是一个 ENUM 搜索特定付款类型的所有付款很简单 def results Payment crea
  • 单成员结构的灵气属性传播问题

    我遇到了 Spirit Qi 的编译问题 它抱怨说值类型不是以下成员标识符 由于某种原因 Qi 的属性系统将标识符视为容器类型 并尝试枚举它的值类型 这是一个类似的问题这个问题 但是 我相信原因是单个成员结构和may与此有关bug incl
  • 如何为应用程序的容器使用相同的凭证处理程序配置来生成新的密码哈希值?

    我的 Web 应用程序的上下文定义类似于
  • php 文本中最常用的单词

    我在 stackoverflow 上找到了下面的代码 它可以很好地查找字符串中最常见的单词 但我可以排除对 a if you have 等 等常用词的计数吗 或者我必须在计数后删除元素吗 我该怎么做 提前致谢
  • Android BLE 血糖通知

    我厌倦了使用 Android BLE SDK 与我的 Glucose 设备进行通信 我需要 UUID 2a18 和 2a34 的 setCharacteristicNotification 我参考Android官方SDK如下 http de
  • 错误:[Dagger/MissingBinding] Map、Provider>

    我有 Dagger MissingBinding 的问题 我在 stackoverflow 上红色了所有相关答案 我尝试使用不同版本的 kotlin gradle dagger 我尝试使用不同的解决方法 例如kapt correctErro
  • Crystal Reports:数据库登录失败

    我在 ASP NET C 中有一个应用程序 其中使用 Sap Crystal Reports for Visual Studio 在 VS 中一切都很完美 但是当我将其部署到 IIS 时 出现 数据库登录失败 错误 当我设置 Crystal
  • Access 中的 SELECT @@IDENTITY 始终返回 0

    我一直在努力寻找解决这个问题的方法 但到目前为止没有任何效果 private void Insert string ConnectionStringAccess Provider Microsoft ACE OLEDB 12 0 Data
  • 跨页面发布

    我只是尝试跨页面发布的示例 我已添加 1 个文本框和 1 个按钮到 default aspx 页面
  • 强制下线所有在线用户中的特定用户

    在我的网站管理员可以查看所有其他在线用户的列表 管理员还可以禁用该列表中的任何帐户 到目前为止一切都很顺利 但现在我决定注销被禁用的用户 如何对上述指定在线用户列表中的特定用户进行注销操作 注意 我对 SQL Server 数据库使用默认成
  • jQuery:获取表中的所有输入值并序列化

    给定以下表结构 当 button被点击了 table tr td td tr table
  • GMail fsockopen():Codeigniter 和 XAMPP 的 SSL 操作失败错误

    错误消息 1 消息 fsockopen SSL 操作失败 代码为 1 OpenSSL 错误消息 错误 14090086 SSL 例程 ssl3 get server certificate 证书验证失败 文件名 库 Email php 线路
  • 如何阻止 r devtools::check() 注意到 .DS_Store

    每次我跑步devtools check 在我的包裹上有一条注释 gt checking for non standard things in the check directory NOTE Found the following file
  • 表格输出 JavaScript 打印不正确

    我正在开发一个项目 该项目将根据当前余额 利率和每月还款确定还清信用卡的时间和支付的利息 我已经能够让我的代码为我提供正确的余额 利息和最低还款额 一直到显示的最后几行 我在让我的表执行正确的输出时遇到了一些麻烦 我尝试过改变一些东西 但它
  • 如何在shell脚本中使用加密和解密的密码

    我正在编写一个 shell 脚本 它执行需要密码的命令 我无法在脚本中以纯文本形式输入密码 我读到了 openssl 加密解密机制 但为了再次加密文件 我需要一个密码 我又无法将其放入脚本中 我不知道让脚本使用安全密码执行命令的最佳方法是什
  • 如何使用 Trollop 制作 Ruby 脚本进行命令行解析? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我最近开始使用Trollop 一个干净而优雅的命令行选项解析器 适用于我所有基于 Ruby 的小型命令行 hack 我发现它确实很容易使用 但入门很困难 尽管有很好的在线文档 但