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

我需要在命令行上运行一个命令,要求用户响应。 万一它有助于命令是:

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

当你运行它时,它警告某事然后问:

无论如何要使用此密钥? (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方法是期望的 ,Ruby 内置支持 :

 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 

gpg可能直接打开终端设备向用户询问问题 – 这是一种常见的安全方法,可以防止脚本完全从文件中驱动。 (有关类似内容,请参阅现已弃用的getpass(3)例程。)

如果你真的不太关心警告来阅读它,你也可以使用gpg命令行选项--yes

  --yes Assume "yes" on most questions. 
Interesting Posts