[英]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重定向到构建页面...这怎么可能?
更新:
多亏了到目前为止的帮助,我才有了一个中途的解决方案。 我目前将$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.