我使用了Python-Flask(触发进程)和Fabric(在远程机器上自动执行任务)。在
我尝试过使用yield关键字,并成功地在Flask中显示示例程序的输出,但没有织物。在
#!/usr/bin/env python
from flask import Flask, render_template, redirect, url_for, Response
import pexpect
import sys
app = Flask(__name__)
@app.route('/getdata')
def getdata():
def meh():
child = pexpect.spawn('/bin/bash')
child.sendline('mysh.sh')
child.expect(pexpect.EOF)
child.expect(' press [Enter]')
child.interact()
child.expect(pexpect.EOF)
for line in iter(sys.stdout.readline,''):
yield line.rstrip() + '\n'
return Response(meh(), mimetype='text/html')
if __name__ == "__main__":
app.run()
有人能给我指点方向吗?以便在运行时向浏览器显示每个结构运行(命令)的stdout。在
好吧,如果你的意思是“实时”而不仅仅是运行时,你可能想做的是多看看你的框架,如果你想实时返回数据(就像在构建工具中一样)。在
为此,您可以将fabric作为一个单独的异步任务运行(使用一些框架,如celery等),并将fabric中的结果转储回队列/管道/数据库/任何东西。然后使用repeat请求或repeat队列从该线程返回原始线程。在
然而,要从数据中调用fabric,fabric(或者如果您真的想,Paramiko(fabric包装的hte库)可以从代码中调用,也就是说,不使用shell调用
fab foo
。在调用run()时,可以检索正在运行的命令的std out/std err的输出。。。Paramiko没有那么好的文档记录(这就是为什么fabric使用起来如此棒),但是如果你看看这个博客: http://jessenoller.com/blog/2009/02/05/ssh-programming-with-paramiko-completely-different这包含一堆信息:
基本上,这里的例子是:
值x>;['13:35向上11天,3:13,4个用户,平均负载:0.14 0.18 0.16\n']
这对于添加到您的flask来说很简单,但不会是realtime,也就是说,您的flask和服务器将缓冲它,并在进程结束时将整个批返回给浏览器,假设浏览器没有超时。在
希望有帮助。在
相关问题 更多 >
编程相关推荐