如何在web2py的html视图中编写生成器函数而不返回?

时间:2016-06-27 11:45:29

标签: javascript python html web2py

我试图以html模式打印远程终端日志,我打算使用生成器功能&在视图中将其写下来,但我如何编写它,因为生成器函数不返回任何内容,因此没有关键字返回。 它还给我一个常量错误--- SocketClosed:客户端关闭套接字。

------这是在视图test.html ------

{{def generator():}}
        {{import subprocess}}
        {{Username = 'username'}}
        {{Password = 'password'}}
        {{IP = 'hostname'}}
        {{Connection_type = '-ssh' #can have values -ssh -telnet -rlogin -raw -serial}}
        {{import sys}}
        {{from subprocess import *}}
        {{proc = Popen(['plink', Connection_type, '-l', Username, '-pw', Password, IP], shell=True, stdin=subprocess.PIPE,stdout=PIPE)}}
        {{proc.stdin.write("WORKSPACE=/export/abc \n export WORKSPACE \n")}}
        {{proc.stdin.write("cd /export/ \n")}}
        {{proc.stdin.write("pwd \n")}}
        {{proc.stdin.write("./xyz.sh \n")}}
        {{while True:}}
            {{data = proc.stdout.readline(50)   # Alternatively proc.stdout.read(1024)}}
            {{yield data}}
            {{if len(data) == 0:}}
              {{break}}
            {{pass}}
        {{pass}}
{{return none}}
{{extend 'layout.html'}}


<!-- Button trigger modal -->

<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">
          <p>Hello There
        {{data=generator()}}}}
        {{for i in data:}}
        {{=i}}
        {{pass}
          </p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <!--<button type="button" class="btn btn-primary">Save changes</button>-->
      </div>
    </div>
  </div>
</div>

P.S.I&#39;我正在使用生成器,否则我的代码会陷入无限循环,直到整个过程完成。

1 个答案:

答案 0 :(得分:0)

在HTML页面返回浏览器之前,web2py模板中的Python代码完全在服务器上执行。浏览器中不能执行Python代码。因此,此方法不适用于在网页中动态显示来自服务器的数据。

加载网页后,如果您需要从服务器检索新数据以显示在页面中,您需要进行Ajax调用或设置某种服务器推送解决方案,例如作为websockets或服务器发送的事件。

web2py包含一些基本websocket functionality,需要Tornado网络服务器。