如何将 STDOUT 重定向到 sinatra 网页
How to redirect STDOUT to sinatra webpage
我以前看过这个问题,但我很好奇如何使用 sinatra 来完成这个问题。认识到 sinatra already has a streaming method,我认为解决方案已经完成了 80%。
类似的题供参考:
通用重定向标准输出:
Streaming stdout to a web page
使用 sinatra 流式传输标准输出(不适合我):
Sinatra 1.3 Streaming w/ Ruby stdout redirection
这是我要完成的示例(为清楚起见进行了简化):
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,即 also built with sinatra。他们正在将标准输出重定向到构建页面...这怎么可能?
更新:
感谢到目前为止的帮助,我有了一个半途而废的解决方案。我目前正在将 $stdout
保存到 StringIO
的新实例中,然后再显示它。但是,这不是答案。对于长 运行 脚本(即 travis-ci 构建),等待整个脚本完成然后显示 $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
我以前看过这个问题,但我很好奇如何使用 sinatra 来完成这个问题。认识到 sinatra already has a streaming method,我认为解决方案已经完成了 80%。
类似的题供参考:
通用重定向标准输出: Streaming stdout to a web page
使用 sinatra 流式传输标准输出(不适合我): Sinatra 1.3 Streaming w/ Ruby stdout redirection
这是我要完成的示例(为清楚起见进行了简化):
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,即 also built with sinatra。他们正在将标准输出重定向到构建页面...这怎么可能?
更新:
感谢到目前为止的帮助,我有了一个半途而废的解决方案。我目前正在将 $stdout
保存到 StringIO
的新实例中,然后再显示它。但是,这不是答案。对于长 运行 脚本(即 travis-ci 构建),等待整个脚本完成然后显示 $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