在 ruby​​ 中运行系统命令并与之交互

2023-11-26

我需要在命令行上运行一个命令来请求用户响应。如果有帮助的话,命令是:

gpg --recipient "Some Name" --encrypt ~/some_file.txt

当您运行此命令时,它会发出警告,然后询问:

还用这个键吗? (是/否)

回答“y”让其正确完成。我一直在尝试使用打开4宝石但我无法让它正确指定“y”。这是我尝试过的:

Open4::popen4(cmd) do |pid, stdin, stdout, stderr|
  stdin.puts "y"
  stdin.close

  puts "pid        : #{ pid }"
  puts "stdout     : #{ stdout.read.strip }"
  puts "stderr     : #{ stderr.read.strip }"
end

我究竟做错了什么?我正在做的事情可能吗?


处理这些情况的 Unix 方法是expect,Ruby 自带的内置支持 for:

require 'pty'
require 'expect'

PTY.spawn("your command here") do |reader, writer|
  reader.expect(/Use this key anyway/, 5) # cont. in 5s if input doesn't match
  writer.puts('y')
  puts "cmd response: #{reader.gets}"
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ruby​​ 中运行系统命令并与之交互 的相关文章

  • 使用单表继承更改 Rails 中 ActiveRecord 类的类型

    我有两种类型的课程 BaseUser lt ActiveRecord Base and User lt BaseUser 它使用 Authlogic 的身份验证系统来 acts as authentic 这种继承是使用单表继承来实现的 如果
  • 在 Rails 控制器中存储对象的最佳方式(会话除外)?

    我有一个 Rails 控制器 class Controllername lt application def method1 obj API CALL session obj access token redirect to redirec
  • 像 String#replace 一样替换 Ruby 中引用的 Integer 值

    我有以下代码 def mymethod a a replace a end mystring b mymethod mystring p mystring gt a 但我想用 Integer 执行相同的操作 那可能吗 简短的回答 不 长答案
  • 从命令行构建 ASP.NET 解决方案?

    如何从命令行构建 ASP NET Web 应用程序 在 bat 文件中尝试此操作 将 v4 0 30319 替换为适当的版本 CD C Windows Microsoft NET Framework v4 0 30319 msbuild C
  • 运行“bundle install”失败并要求我运行“bundle install”

    事实上 当从我从 git 存储库克隆的现有 Rails 应用程序内部运行时 所有与 gem 相关的命令都会导致相同的错误消息 bundle install Could not find tzinfo 0 3 27 in any of the
  • 使用 gem 添加辅助方法

    我找到了很多有关添加表单辅助方法的信息 请参阅我的其他问题之一 但我找不到有关添加辅助方法的任何信息 就好像它们是在application helper rb 我尝试过复制application helper rb从 Rails 应用程序到
  • 查找从 unix 命令行输入的单词出现的次数

    对于文件file1 txt其中包含 Apple fruit Apple tree Tree AApple AApklle Apple apple TREE Apple 我想查找该单词出现的次数Apple 输出应该是4 我的 script s
  • SAS 显示管理器命令

    SAS 显示管理器是 SAS 系统的命令行界面 它作为遗留设施保留在 Base SAS 中 然而 关于如何使用此功能的在线文档充其量也很少 而且谷歌搜索也没有什么成果 常见的 DM 命令是 CLEAR LOG 清晰的输出 WPGM 我的问题
  • 将对象数组转换为 ActiveRecord::Relation

    我有一个对象数组 我们称其为Indicator 我想运行 Indicator 类方法 def self subjects该数组上的种类 范围等 我知道在一组对象上运行类方法的唯一方法是让它们成为 ActiveRecord Relation
  • 如何在 Ruby 中处理大文件?

    我对编程还很陌生 所以要温柔 我正在尝试从图书馆数据库 dat 文件中提取 IBSN 编号 我已经编写了有效的代码 但它只搜索了 180MB 文件的大约一半 如何调整它以搜索整个文件 或者我如何编写一个程序将 dat 文件分割成可管理的块
  • CMake的execute_process和任意shell脚本

    CMake s execute processcommand 似乎只让你执行一个进程 而不是你可以输入命令 shell 的任意行 问题是 我想使用管道 文件描述符重定向等 但这似乎不可能 另一种选择对我来说会非常痛苦 我认为 我应该怎么办
  • Windows 上的 ruby​​ 中出现 SSL 错误

    我收到以下错误 C Users user Desktop folder gt ruby exchange rate rb C Ruby23 x64 lib ruby 2 3 0 net http rb 933 in connect nonb
  • before_filter set_locale 除了控制器

    My routes rb MyApp Application routes draw do scope locale do all resources here end namespace blog do resources posts o
  • 使用字符串变量 **kwargs 作为命名参数

    我正在尝试找出一种方法来循环 json 配置文件并使用键名称作为使用 kwargs 的方法的参数名称 我创建了一个 json 配置文件并使用键名作为方法 我只需将 set 附加到键名称即可调用正确的方法 我将 json 转换为字典以循环遍历
  • Bundler 找不到 gem“rack”的兼容版本:

    我是 Ruby 新手 但实际上如果我不想安装 Redmine 我就不需要它 我正在按照以下说明进行操作http www redmine org projects redmine wiki HowTo install Redmine on C
  • 有没有办法在 Nokogiri css 中转义非字母数字字符?

    我有一个锚标签 file html stuff morestuff CHP 1 SECT 2 1 尝试提取 Nokogiri 中引用的内容 documentFragment at css stuff morestuff CHP 1 SECT
  • ruby require 问题(与 $LOAD_PATH 有关)

    我正在尝试使用我刚刚安装的 gem 通过sudo gem install excelsior 像这样 需要 红宝石 要求 精益求精 这在 irb 中工作得很好 但是当我将完全相同的代码粘贴到 rb 文件中并尝试使用 ruby 运行它时 我得
  • 登录西纳特拉?

    我无法弄清楚如何使用 Sinatra 记录消息 我不想记录请求 而是在我的应用程序中的某些点记录自定义消息 例如 当获取 URL 时 我想记录 Fetching url 这就是我想要的 指定日志级别的能力 例如 logger info Fe
  • 哈米尔评论结束

    我是哈米尔新手 这让我很困惑 我不喜欢删除可以注释掉的代码 但我不知道如何在 haml 中正确结束注释 这是一个代码片段 field f label member id br f text field member id field f l
  • 为什么这段 Ruby 代码无法写入日志文件?

    一旦脚本被守护 记录器就无法再写入文件 那么我应该如何以及何时初始化日志呢 require rubygems require daemons require logging def create new logger logger Logg

随机推荐

  • 服务发现如何与现代 docker/docker-compose 一起工作?

    我正在使用 Docker 1 11 1 和 docker compose 1 8 0 rc2 在过去的美好时光 所以 去年 你可以建立一个docker compose yml像这样的文件 app image myapp frontend i
  • 使用 pika 发布消息时如何添加标头键:值对

    我正在编写一个自动化测试来测试消费者 到目前为止 我在发布消息时不需要包含标头 但现在我需要了 而且似乎缺乏文档 这是我的出版商 class RMQProducer object def init self host exchange ro
  • NSView 的自动调整大小行为

    我需要了解 NSView 如何自动调整其视图的大小 我已经在 IB 中设置了所有内容 并且我的子视图可以很好地调整大小 当我用鼠标调整窗口大小时 但是 如果我这样做 myMainView setFrame 使用我的新框架矩形 什么也没有发生
  • 如何将html5输入类型日期和时间转换为javascript日期时间

    我正在使用 html5 输入类型 日期和时间 如何将表单输入类型转换为javascript对象日期 其中包含时间 这是我的代码的一部分
  • 在 .NET 中使用 XML 注释有哪些优点?

    我无法理解使用 XML 注释的优点 我知道它们可以转换为代码外部的漂亮文档 但使用更简洁的 DOxygen 语法也可以实现同样的效果 我认为 XML 注释是错误的 因为 他们总体上混淆了注释和代码 它们更难被人类阅读 在单个屏幕上可以查看的
  • ggplot2:y 轴标签在绘图区域内左对齐

    我正在寻找一种自动移动 y 轴刻度标签的方法 以便它们显示左对齐within实际地块面积 我喜欢 ggplot 中主题组件的总体灵活性 但在尝试找到通用方法来实现此目的时遇到了困难 我知道给予axis text y的组合hjust 0负右边
  • cmake 是否可以选择避免使用未定义的变量(如 bash set-u)

    Does cmake有一种在使用未定义变量时生成错误的机制 有点像set u选项中bash 我有一个由多个项目组成的大项目CMakeLists txt文件 大约 1500 行 所以使用这种结构是相当困难的 if NOT DEFINED VA
  • 在 Angular 2 中重置模板驱动的表单(模型和验证)

    我们如何重置控件的验证状态模板驱动角度 2 的形式 我知道可以通过设置控件所绑定的模型值来重置控件 但是验证状态 原始 肮脏等 又如何呢 我尝试过这样的事情
  • 有没有办法在 C 中进行柯里化?

    假设我有一个指向函数的指针 stack push stack stk void el 我希望能够打电话curry stack push my stack 并返回一个只需要的函数void el 我想不出一种方法来做到这一点 因为 C 不允许运
  • 重定向时向 Zuul 添加标头

    我正在尝试使用Zuul将调用重定向到其他地方的下游系统 在重定向中 我需要添加一个包含必要数据的标头api接收重定向以进行处理 我似乎无法让下游系统检测到这些数据 附件是我的代码 我在用Zuul from Edgware SR3 Sprin
  • 杀死 Pthread 库中的线程

    I use pthread create thread1 attrs 如果发生某种情况需要杀死这个线程如何杀死它 首先存储线程id pthread create thr 然后稍后打电话 pthread cancel thr 但是 这不是推荐
  • C 中的“由于数据类型范围有限,比较始终为真”警告?

    我有以下代码 Point h define WIDTH 8 define HEIGHT 8 typedef struct Point char x char y Point Board c include
  • 给出 3 个点和一个绘图圆

    我想将点 0 1 1 0 和 0 1 提供给 python 并绘制经过它们的圆 是否存在一个Python模块可以做到这一点 我尝试过使用 matplotlib import matplotlib pyplot as plt plt plot
  • 无法从phonegap中的sd卡读取图像文件:android

    我是一个phonegap新手 我正在尝试使用 Android 中的 SD 卡读取图像文件 PhoneGap官方教程 问题是图像没有显示 而是在其位置出现一个问号 My Code var pictureSource var destinati
  • 使用指针作为容器迭代器是否违反标准

    安吉发表了评论 that a vector使用原始指针作为迭代器类型就可以了 这让我有点困惑 我开始研究它 发现需要vector迭代器只是它们 随机访问迭代器 明确指出指针符合以下条件 指向数组元素的指针满足所有要求 这是编译器提供迭代器的
  • UI-router,在服务中使用stateparams

    我有这样的状态 state admin category url category templateUrl views admin category html resolve category CategoryLoader function
  • ERR背后的实际信号是什么

    我在几个地方 包括SO 读到 e被认为是 糟糕的形式 并且在出现任何错误时退出脚本都是不可靠的 处理错误的更好方法似乎是使用trap 像这样 trap echo there was an error exit 1 ERR 我似乎无法在手册页
  • 转到 C 中的特定地址

    如何 JMP 到 C 中的特定地址 我想用 goto 0x10080000 这不起作用 还有其他方法可以更改程序计数器的地址吗 You can cast函数指针的地址 然后跳转到 void void 0x10008000 为了更清楚一点 t
  • MySQL 中的错误 1064 (42000)

    我正在尝试使用从 MS SQL Azure 数据库创建的数据库转储来填充新的 MySQL 空数据库 但出现以下错误 ERROR 1064 42000 at line 1 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本对应的手册
  • 在 ruby​​ 中运行系统命令并与之交互

    我需要在命令行上运行一个命令来请求用户响应 如果有帮助的话 命令是 gpg recipient Some Name encrypt some file txt 当您运行此命令时 它会发出警告 然后询问 还用这个键吗 是 否 回答 y 让其正