gpt4 book ai didi

ruby - 如何将 STDOUT 重定向到 sinatra 网页

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:28:05 26 4
gpt4 key购买 nike

我以前看过这个问题,但我很好奇如何使用 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 .他们正在将标准输出重定向到构建页面...这怎么可能?

Travis-CI build page

更新:

感谢到目前为止的帮助,我有一个半途而废的解决方案。我目前正在将 $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

关于ruby - 如何将 STDOUT 重定向到 sinatra 网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com