将金字塔视图 subprocess.Popen 的标准输出动态输出到网页
Dynamically output stdout from Pyramid views' subprocess.Popen to web page
我正在使用 Pyramid 网络框架来提供性能模型并允许许多用户远程使用它。
简而言之,将用户提供的参数输入到一个XML文件中,然后用XML用C++编写的模型执行subprocess.Popen在单独的视图中。
该模型可能需要一些时间,其日志记录信息对用户很有价值。我希望我可以将标准输出中的每一行写入 HTML 文件,然后以该文件作为源生成一个 iFrame。
子流程开始后,将生成一个 iFrame,其中 HTML 文件被更新为源
<iframe id="logSimInlineFrame" src="${request.static_url('fcmod_web:temp/logfile.html')}" Content-Type="text/plain" charset="utf-8"></iframe>
我意识到这不是静态的,我遇到了以下错误
ValueError: No static URL definition matching fcmod_web:temp/logfile.html
所以我的问题是,我使用内容由 Python 生成的 iFrame 是否正确?如果是这样,我应该如何提供这些数据以便动态更新?
或者,我认为是这种情况,是否有更有效的方法将数据从 stdout PIPE 流式传输到网页上的框架?
IFrame 流是最好的。可用于与浏览器进行实时通信的技术
Server-sent events - see Flask example(金字塔上应该差别不大)
AJAX 和 HTTP 长轮询等技术不是为流式通信设计的。所有现代浏览器都原生支持 WebSockets - 最后一个不支持它们的浏览器是 Android 2.2.
对于流式传输,您的普通网络服务器可能不会削减它,因此您需要探索,例如uWSGI and Server-Sent event支持。请注意,Python 没有实时通信标准,这与 HTTP 的 WSGI 不同,因此任何解决方案都将特定于您的 Web 服务器软件。
我正在使用 Pyramid 网络框架来提供性能模型并允许许多用户远程使用它。
简而言之,将用户提供的参数输入到一个XML文件中,然后用XML用C++编写的模型执行subprocess.Popen在单独的视图中。
该模型可能需要一些时间,其日志记录信息对用户很有价值。我希望我可以将标准输出中的每一行写入 HTML 文件,然后以该文件作为源生成一个 iFrame。
子流程开始后,将生成一个 iFrame,其中 HTML 文件被更新为源
<iframe id="logSimInlineFrame" src="${request.static_url('fcmod_web:temp/logfile.html')}" Content-Type="text/plain" charset="utf-8"></iframe>
我意识到这不是静态的,我遇到了以下错误
ValueError: No static URL definition matching fcmod_web:temp/logfile.html
所以我的问题是,我使用内容由 Python 生成的 iFrame 是否正确?如果是这样,我应该如何提供这些数据以便动态更新?
或者,我认为是这种情况,是否有更有效的方法将数据从 stdout PIPE 流式传输到网页上的框架?
IFrame 流是最好的。可用于与浏览器进行实时通信的技术
Server-sent events - see Flask example(金字塔上应该差别不大)
AJAX 和 HTTP 长轮询等技术不是为流式通信设计的。所有现代浏览器都原生支持 WebSockets - 最后一个不支持它们的浏览器是 Android 2.2.
对于流式传输,您的普通网络服务器可能不会削减它,因此您需要探索,例如uWSGI and Server-Sent event支持。请注意,Python 没有实时通信标准,这与 HTTP 的 WSGI 不同,因此任何解决方案都将特定于您的 Web 服务器软件。