我如何在没有 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">×</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 网络服务器。
我正在尝试以 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">×</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 网络服务器。