繁体   English   中英

如何将STDOUT重定向到sinatra网页

[英]How to redirect STDOUT to sinatra webpage

我之前已经看到过这个问题,但是我很好奇要使用sinatra来完成此问题。 认识到sinatra已经有一种流方法 ,我认为该解决方案已经完成了80%。

这些是一些类似的问题,可供参考:

通用重定向标准输出:将标准输出流式传输到网页

使用sinatra来流标准输出(对我不起作用): Sinatra 1.3流/带Ruby stdout重定向

这是我要完成的工作的一个示例(为清楚起见已简化):

require 'sinatra'
require 'thin'

get '/' do
  stream do |out|
    out << method_that_puts
  end
end

def method_that_puts
  puts 'I would like...'
  sleep 1.0
  puts 'to display this...'
  sleep 1.0
  puts 'on a web page!'
end

编辑:完美的例子是travis-ci,它也是用sinatra构建的 他们正在将stdout重定向到构建页面...这怎么可能?

Travis-CI构建页面

更新:

多亏了到目前为止的帮助,我才有了一个中途的解决方案。 我目前将$stdout保存到StringIO的新实例中,然后显示它。 但是,这不是答案。 对于长时间运行的脚本(即travis-ci build),等待整个脚本完成然后显示$stdout太可笑了。 需要弄清楚如何流式传输它...

这是我到目前为止的内容:

foo = StringIO.new
$stdout = foo

get '/' do
  stream do |out|
    method_that_puts
    out.puts $stdout.string
  end
end

def method_that_puts
  puts 'I would like...'
  sleep 1.0
  puts 'to display this...'
  sleep 1.0
  puts 'on a web page!'
end

您可以使用Sinatra::Streaming (来自sinatra-contrib gem),它提供了可以写入的输出对象。

这是文档中的示例:

get '/' do
  stream do |out|
    out.puts "Hello World!", "How are you?"
    out.write "Written #{out.pos} bytes so far!\n"
    out.putc(65) unless out.closed?
    out.flush
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM