为ruby中的system()调用设置输入
我正在尝试使用net / sftp下载文件,并将其内容作为命令行应用程序的stdin传递。 我可以通过首先将文件写入磁盘来实现,但我宁愿避免这一步。
有没有办法控制ruby中用system()
调用的程序的输入?
对于这类事情,根本不要使用system
, system
最适合运行您不需要与之交谈的外部命令。
使用Open3.open3
或Open3.open2
向外部进程打开一些管道,然后写入stdin
管道,就像写入任何其他IO通道一样; 如果有任何输出要处理,那么你可以直接从stdout
管道读取它,就像从任何其他输入IO通道读取一样。
也许是这样的东西(使用open建议的mu)?
contents = "Hello, World!" open('|echo', 'w') { puts contents }
这也可以通过IO.expect来完成
require 'pty' require 'expect' str = "RUBY_VERSION" PTY.spawn("irb") do |reader, writer| reader.expect(/0> /) writer.puts(str) reader.expect(/=> /) answer = reader.gets puts "Ruby version from irb: #{answer}" end
这等待生成的进程显示“0>”(irb提示符的结束)以及何时看到打印已定义的字符串。 然后它通过等待显示“=>”来查找返回的irb并获取返回的数据。