为ruby中的system()调用设置输入

我正在尝试使用net / sftp下载文件,并将其内容作为命令行应用程序的stdin传递。 我可以通过首先将文件写入磁盘来实现,但我宁愿避免这一步。

有没有办法控制ruby中用system()调用的程序的输入?

对于这类事情,根本不要使用systemsystem最适合运行您不需要与之交谈的外部命令。

使用Open3.open3Open3.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并获取返回的数据。