在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.