Python django前端运行子流程输出到浏览器窗口

Python django前端运行子流程输出到浏览器窗口,python,django,Python,Django,我基本上有一个用perl编写的后端程序。该程序将一些配置推送到网络设备上。它提供了大量的输出,我希望用户能够在程序运行时看到它。到目前为止,这很容易,因为我一直在终端运行 现在我正在尝试编写一个django应用程序。我基本上希望用户按下submit,浏览器将他们带到一个新页面,在这个新页面上,我希望用户在程序运行时看到该程序的文本输出 我已设法使程序在后台运行,方法是: 假设下面是一个简单的请求。在响应网页中,我希望看到实时运行的程序的输出,或者至少每隔几秒钟刷新一次以查看最新的输出(目前可能

我基本上有一个用perl编写的后端程序。该程序将一些配置推送到网络设备上。它提供了大量的输出,我希望用户能够在程序运行时看到它。到目前为止,这很容易,因为我一直在终端运行

现在我正在尝试编写一个django应用程序。我基本上希望用户按下submit,浏览器将他们带到一个新页面,在这个新页面上,我希望用户在程序运行时看到该程序的文本输出

我已设法使程序在后台运行,方法是:

假设下面是一个简单的请求。在响应网页中,我希望看到实时运行的程序的输出,或者至少每隔几秒钟刷新一次以查看最新的输出(目前可能是一种解决方法)


您可以像这样读取子流程的输出

pipe = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
result = pipe.stdout.read() # this is the output of the process
return render_to_response('config/config.html', {'result': result})

但是,您只能在流程完成后才能看到结果。如果您想在程序运行时看到输出,这将有点困难。我认为可以通过将子进程调用放入单独的进程或线程,让进程写入文件或消息队列,然后在视图中读取该文件来完成

这似乎很合理-你的问题是什么?对不起,我应该添加最后一个问题。它是“我将如何调整上面的代码片段,使之符合程序”builder.pl“将输出提供给屏幕。pl基本上是一个expect脚本。它登录到路由器并进行一些配置。我希望用户在浏览器屏幕上看到这种情况。感谢Syea,让进程将其STDERR和STDOUT输出到文件中,然后分别显示这些文件可能是最好的解决方案。当然,为了恢复丢失的会话,需要增加存储文件名和相关用户的复杂性。我认为stdout和stderr可以方便地放在一个文件中。上面的代码看起来要么阻塞直到代码输出,要么部分给出响应,这样它将只显示文件的开头。这意味着我需要尝试确保:-)我想我可以输出到文件并每隔几分钟刷新屏幕,通过设置一些HTTP元标记将屏幕设置为刷新来显示输出,但这似乎有点过时。我是否可以使用以下方法来实现这一点:-虽然我尝试了这个方法,但到目前为止,它只提供了一个静态页面从发电机的第一个输出功能。哦,实际工作!!!我只是错过了时间模块。应该看看服务器调试。
pipe = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
result = pipe.stdout.read() # this is the output of the process
return render_to_response('config/config.html', {'result': result})