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

标签 ruby command-line command-line-interface pgp

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

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

当你运行它时,它会发出警告然后询问:

Use this key anyway? (y/N)

响应“y”让它正确完成。我一直在尝试使用 open4 gem但我无法让它正确指定“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 自带 built-in support对于:

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

关于ruby - 在 ruby​​ 中运行系统命令并与之交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645173/

相关文章:

可以通过 GUI 和命令行控制的 Javafx 程序?

php - 如何在PHP中使用异步IO(用于IRC客户端)?

ruby - 将 ruby​​ 代码注入(inject)嵌套block

ruby - 优化范围如何工作?

Java 将输出行替换为标准输出

来自 CLI 的 PHP error_log

ruby-on-rails - 为什么 "rails generate migration"调用 "invoke activerecord"

mysql - DataMapper 枚举字段在保存或更新时不会保留

java - 读取 java jar 命令控制台输出

mysql - "mysql -v"命令行错误(linux/ubuntu)