【问题标题】:Dynamically output stdout from Pyramid views' subprocess.Popen to web page从 Pyramid 视图的 subprocess.Popen 动态输出标准输出到网页
【发布时间】:2015-07-28 22:43:24
【问题描述】:

我正在使用 Pyramid Web 框架来提供性能模型并允许大量用户远程使用它。

简而言之,将用户提供的参数输入到 XML 文件中,然后在单独的视图中使用 subprocess.Popen 执行用 C++ 编写并使用 XML 的模型。

模型可能需要一些时间,其日志信息对用户很有价值。我希望我可以将标准输出中的每一行写入一个 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

所以我的问题是,我的 iFrame 内容是由 Python 生成的吗?如果是这样,我应该如何提供这些数据以便动态更新?

或者,我想是这种情况,是否有更有效的方法将数据从标准输出 PIPE 流式传输到网页上的框架?

【问题讨论】:

  • 我想说你需要为此使用 ajax
  • 谢谢@matino。我对 ajax 很熟悉,但是我应该将标准输出发送到哪里以及如何查询呢?

标签: javascript python subprocess stdout pyramid


【解决方案1】:

IFrame 流是最好的。可用于与浏览器进行实时通信的技术

AJAX 和 HTTP 长轮询等技术并非专为流式通信而设计。所有现代浏览器都原生支持 WebSockets - 最后一个不支持它们的浏览器是 Android 2.2。

对于流式传输,您的普通网络服务器可能不会削减它,因此您需要探索例如uWSGI and Server-Sent event 支持。请注意,Python 没有用于实时通信的标准,这与用于 HTTP 的 WSGI 不同,因此任何解决方案都将特定于您的 Web 服务器软件。

【讨论】:

猜你喜欢
  • 2010-12-21
  • 2011-11-30
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多