我如何在没有 return 的情况下在 web2py 的 html 视图中编写生成器函数?

How do i write a generator function in html view in web2py with no return?

我正在尝试以 html 模式打印远程终端日志,我打算使用生成器函数实现此目的并将其写在视图中,但是自生成器函数以来我该如何编写它没有 return 任何东西,因此没有关键字 return。 它还给了我一个持续的错误---SocketClosed: Client closed socket.

------这个在视图里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我正在使用生成器,否则我的代码会陷入无限循环,直到整个过程完成。

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

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

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