在 Ruby 脚本中运行命令行命令

2024-03-29

有没有办法通过 Ruby 运行命令行命令?我正在尝试创建一个小型 Rub​​y 程序,该程序可以通过“screen”、“rcsz”等命令行程序拨出和接收/发送。

如果我能将所有这些与 Ruby(MySQL 后端等)结合起来,那就太好了


是的。有以下几种方法:


a. Use %x or '`':

%x(echo hi) #=> "hi\n"
%x(echo hi >&2) #=> "" (prints 'hi' to stderr)

`echo hi` #=> "hi\n"
`echo hi >&2` #=> "" (prints 'hi' to stderr)

这些方法将返回标准输出,并将标准错误重定向到程序的。


b. Use system:

system 'echo hi' #=> true (prints 'hi')
system 'echo hi >&2' #=> true (prints 'hi' to stderr)
system 'exit 1' #=> nil

该方法返回true如果命令成功。它将所有输出重定向到程序的输出。


c. Use exec:

fork { exec 'sleep 60' } # you see a new process in top, "sleep", but no extra ruby process. 
exec 'echo hi' # prints 'hi'
# the code will never get here.

这会将当前进程替换为该命令创建的进程。


d.(红宝石1.9)使用spawn:

spawn 'sleep 1; echo one' #=> 430
spawn 'echo two' #=> 431
sleep 2
# This program will print "two\none".

该方法不等待进程退出并返回PID。


e. Use IO.popen:

io = IO.popen 'cat', 'r+'
$stdout = io
puts 'hi'
$stdout = IO.new 0
p io.read(1)
io.close
# prints '"h"'.

该方法将返回一个IO代表新进程的输入/输出的对象。这也是目前我所知道的给程序输入的唯一方法。


f. Use Open3 http://ruby-doc.org/stdlib/libdoc/open3/rdoc/index.html(1.9.2 及更高版本)

require 'open3'

stdout,stderr,status = Open3.capture3(some_command)
STDERR.puts stderr
if status.successful?
  puts stdout
else
  STDERR.puts "OH NO!"
end

Open3还有几个其他函数可以显式访问两个输出流。它与 popen 类似,但允许您访问 stderr。

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

在 Ruby 脚本中运行命令行命令 的相关文章

  • 如何将 rubocop 与 Rake 集成?

    rubocop https github com bbatsov rubocop是 Ruby 的代码风格检查器 与 rubocop 类似的工具 Cane 可以与 Rake 集成 https github com square cane in
  • Ruby 元编程,RSpec 的“应该”如何工作?

    我正在阅读 RSpec 并试图弄清楚 RSpec 的 应该 是如何实现的 有人可以帮忙解释一下这个函数的元性质是如何工作的吗 代码位于此处 http github com dchelimsky rspec blob master lib s
  • 如何使用 LDAP 进行 Ruby on Rails 身份验证? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个网络应用程序 并且我有一个使用的身份验证方法bcrypt gem它工作正常 但我想将身份验
  • 安装 Sass 时出错(Ruby 2.5.0.1、MSYS2 20161025.0.0)

    我尝试安装 Sass 我安装了Ruby and MSYS2在此之前 来自所有人的最新消息巧克力味 https chocolatey org choco install ruby choco install msys2 看来它们已正确安装 r
  • Rails 应用程序中的持久 TCP 连接

    我有一个在服务器上运行的第三方应用程序 它对客户端进行身份验证并返回响应 我的问题是 对于我收到 Rails 应用程序的每个请求 我都需要建立 TCP 连接并获取数据 是否可以有一个持久连接 以便我可以减少建立连接的开销 我希望你使用的是
  • Ruby 反向柯里化:这可能吗?

    关于 Ruby 1 9 x 中的柯里化 我一直在某些地方使用它 并且可以像基本上支持 proc 参数的默认参数一样进行翻译 p proc x y z x y z p curry 1 gt returns a lambda p curry 1
  • RSpec 抛出分段错误

    有时我的测试套件会无缘无故地抛出分段错误 这是输出 Users Test rvm gems ruby 1 9 3 p392 gems activerecord 3 2 9 lib active record relation query m
  • 如何修复 AJAX 在选中复选框时始终触发?

    有时这个 AJAX 会触发 有时不会 让我解释一下 habit js document ready function habit check change function habit this parent siblings habit
  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • C++ 在后台运行 system(),dir 路径中带有空格,+输出到文本文件

    我正在尝试使用一堆选项运行 tshark exe 并输出到 fil 见下文 然而 我真的坚持要使用的 system 命令的正确语法 我以前在这里得到过帮助 甚至已经让它与 dos for 循环一起工作 但这超出了我的能力范围 我已经尝试了各
  • 为什么 Chrome Devtools 中的 Ruby 文件 (.erb) 无法使用语法高亮显示?

    根据本新闻稿 Chrome 开发者工具可以对多种语言进行语法高亮显示 包括 erb 文件 https plus google com GoogleChromeDevelopers posts MnikfMyJ14X https plus g
  • 如何在一行中输出多个变量

    我试图确定 CSV 中的用户是否处于活动状态 此外 我想知道它们是否是服务帐户 用户帐户或基于 OU 的计算机帐户 一切都在膨胀 直到我尝试输出它 输出分为几行 每个变量一行 我希望输出在一行上 中间有逗号 这样我完成后就会有一个 CSV
  • 使用 Ruby CSV 标头转换器

    假设我有以下课程 class Buyer lt ActiveRecord Base attr accesible first name last name 以及 CSV 文件中的以下内容 First Name Last Name John
  • Ruby 守护进程,用于使临时 Ruby 实例的对象保持活动状态

    Ruby 是否提供了一种在不同运行的 Ruby 进程之间共享变量 更重要的是 类对象和我认为对此有用的任何其他数据抽象 的机制 例如 如果我有一个类被实例化 初始化并仔细调整到某种状态 我希望该状态对我全天所有其他独立的 Ruby 和 Ir
  • `class_eval` 字符串中的变量范围是什么?

    我在用class eval编写要在当前类的上下文中执行的代码 在下面的代码中 我想添加一个用于属性值更改的计数器 class Class def attr count attr name attr name attr name to s a
  • Ruby on Rails:simple_form + Twitter Bootstrap 未显示

    我正在为我的网站上的新用户创建一个简单的注册表单 我已经运行了 simple form bootstrap 的安装 rails g simple form install bootstrap 但是 它仍然没有显示并呈现为正常的 simple
  • 使用“回形针”gem 和 Ruby on Rails 3 时出现问题

    我在运行 Snow Leopard v1 6 5 的 MacO 上使用 Ruby on Rails 3 我想使用 回形针 gem 所以我将它包含在我的 Gemfile 中 如下所示 gem paperclip gt 2 3 然后 在终端中运
  • “array.map”是否保留原始顺序?

    我有一个User类has many Jobs 我使用以下代码映射作业 def ranges user jobs map u u start at u end at end 我有一个比较两个数组的规范 my array start1 end1
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati

随机推荐

  • 将 varchar 值转换为数据类型 int 时转换失败

    我有一个 varchar 1000 列声明为包含所有数字的字段 如下所示 我想执行以下脚本 我需要这个才能工作 Declare PostalCode varchar 1000 0 set PostalCode 7005036 7004168
  • 如何使用ML模型和FastAPI处理多个用户的请求?

    我正在研究通过FastAPI分发人工智能模块的过程 我创建了一个 FastAPI 应用程序 它使用预先学习的机器学习模型来回答问题 在这种情况下 一个用户使用是没有问题的 但是当多个用户同时使用时 响应可能会太慢 那么 当多个用户输入问题时
  • 如何让MySQL像SQLite一样处理字符串,涉及Unicode和排序规则?

    我已经在 SO MySQL 文档和其他地方研究这个问题几个小时了 但仍然找不到令人满意的解决方案 问题是 让 MySQL 像 SQLite 一样处理字符串而不需要任何额外的 智能 转换的最简单方法是什么 例如 以下代码在 SQLite 中完
  • 如何使用 bazel 中的 make 规则链接库构建

    我已经使用构建了一个 lib so在 bazel 中制定规则 https stackoverflow com questions 58035752 building makefile using bazel 如何将此外部 lib so 链接
  • 将“名字姓氏”更改为“姓氏,名字”

    我有一个姓名列表 需要将其从 名字姓氏 转换为 姓氏 名字 Barack Obama Donald J Trump J Edgar Hoover Beyonce Knowles Carter Sting 我用了 G Grothendieck
  • 以编程方式触发 ResponsiveSlides.js

    我在用着响应式幻灯片 js http responsive slides viljamis com 我正在尝试以编程方式更改幻灯片 我已经尝试过两种方法 但都没有成功 调用插件的slideTo来自缩略图上的单击事件的函数 传递它应该转到的幻
  • JavaScript 是否有相当于 VBScript 的 ExecuteGlobal 的功能?

    javascript 中是否有 ExecuteGlobal 的替代方案 Function vbExecuteGlobal parmSCRIPT ExecuteGlobal parmSCRIPT End Function DevGuru 描述
  • 使用 Sumifs() 的更快方法

    我每周有一项任务 需要更新一份报告 目前刚刚超过 50K 行 该报告每周都会增长约 500 行 手动添加新数据后 我运行下面的代码来执行Sumifs 总结数据 数据结构为 A 至 C 列是标准列 数字 字母 数字 D 列包含要求和的数量 整
  • 根据两列删除重复项

    我有这张表 我想要一个 SELECT 来排除标记的行 一般规则是 如果有两行或多行的 controlname AND Brandname AND grouptypes 列相等 然后保留组名不是 Keine Zuordnung 的行 CONT
  • 如何将过滤器应用于具有多个“AND”条件的 DataView

    我有一个DataTable包含一些行 哪个被复制到DataView 现在我的 ID 格式为List
  • 使用 JQuery 从出生日期计算年龄

    我需要使用 JQuery 计算某人从出生日期算起是否已超过 18 岁 var curr new Date curr setFullYear curr getFullYear 18 var dob Date parse this text i
  • DataGridView 复选框列 - 值和功能

    我已在 C 表单中的 DataGridView 中添加了一个复选框列 该功能需要是动态的 您选择一个客户 然后显示他们可以提供服务的所有项目 然后您选择这次希望为其中哪些项目提供服务 不管怎样 代码现在将在 DGV 的开头添加一个复选框 我
  • N 个相同处理器上的任务调度的精确算法?

    我正在寻找精确的算法 可以在 N 个相同的处理器中找到任务调度的最佳解决方案 该算法的时间并不重要 最重要的是一个最佳解决方案 完成最后一个任务时所有处理器的最短时间 理论上描述该算法的方程如下 P Cmax 如果有人有算法 尤其是 Jav
  • Spring Data 返回 List

    我有这个存储库 Repository public interface ProductRepository extends JpaRepository
  • java.lang.NoClassDefFoundError:Lorg/slf4j/Logger

    我正在使用具有 Maven 支持的 Intellij 启动 tomcat 一旦我添加以下 tomcat maven 依赖项
  • 制作 Sequelize 显示表格

    我正在 node js 中创建一个项目 我的页面之一将显示数据库中所有表的列表 我想知道Sequelize是否有 显示表格 之类的功能 Thanks 使用续集showAllSchemas method var sequelize new S
  • Google 风格指南(前向声明部分)

    Preface Google 风格指南列出了前向声明的缺点 前向声明可以隐藏依赖项 允许用户代码在标头更改时跳过必要的重新编译 前向声明可能会因库的后续更改而被破坏 函数和模板的前向声明可以防止标头所有者对其 API 进行其他兼容的更改 例
  • 具有可见分隔线的不可点击列表视图项目

    我想禁用列表视图项目的单击 一种解决方案是覆盖areAllItemsEnabled 始终返回 false 并且isEnabled 对于特定位置返回 false 但是 这会导致特定列表视图项周围的分隔线消失 有些人建议返回 trueareAl
  • 如何正确打印 __FILE__ 扩展为的字符串?

    考虑这个程序 include
  • 在 Ruby 脚本中运行命令行命令

    有没有办法通过 Ruby 运行命令行命令 我正在尝试创建一个小型 Rub y 程序 该程序可以通过 screen rcsz 等命令行程序拨出和接收 发送 如果我能将所有这些与 Ruby MySQL 后端等 结合起来 那就太好了 是的 有以下