我需要在命令行上运行一个命令,要求用户响应.万一它有助于命令是:
- 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