我试图以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">×</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;我正在使用生成器,否则我的代码会陷入无限循环,直到整个过程完成。
答案 0 :(得分:0)
在HTML页面返回浏览器之前,web2py模板中的Python代码完全在服务器上执行。浏览器中不能执行Python代码。因此,此方法不适用于在网页中动态显示来自服务器的数据。
加载网页后,如果您需要从服务器检索新数据以显示在页面中,您需要进行Ajax调用或设置某种服务器推送解决方案,例如作为websockets或服务器发送的事件。
web2py包含一些基本websocket functionality,需要Tornado网络服务器。