我有一个远程主机,我在该主机上通过paramiko运行一个涡轮增压器(涡轮增压器周期性地显示温度,功率和负载CPU)。 Stdout paramiko周期性地从远程主机接收来自turbostat的数据字符串。 我想将此输出流发送到Flask以在网络上查看该流,但是现在我的代码在网络上仅接收一个字符串
app = Flask(__name__)
apply_config(app, config)
app.add_url_rule('/api/host/<comp>/turbostat', 'turbostat', turbostat)
return app
def turbostat(comp):
def inner():
ip_addr = get_eine_ip_addr(comp)
print(ip_addr)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip_addr, username='root', password='1', port=22, timeout=20)
sin, sout, serr = ssh.exec_command(""" turbostat -S | awk '{print "%Busy:"$2, "Bzy_MHz:"$3, "CoreTmp:"$10, "PkgWatt:"$16}' """)
for line in line_buffered(sout):
print(line)
return line
return flask.Response(inner(), mimetype='text/html')
def line_buffered(f):
while not f.channel.exit_status_ready():
yield str(f.readline())```
答案 0 :(得分:0)
您在第一行中断了循环:
for line in line_buffered(sout):
print(line)
return line
不确定turbostat
要做什么。但是,如果要打印完整的输出,只需执行以下操作:
print(sout.read())
(而且您甚至不需要line_buffered
)。
答案 1 :(得分:0)
我找到了正确的方法:
def turbostat(comp):
ip_addr = get_eine_ip_addr(comp)
print(ip_addr)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip_addr, username='root', password='1', port=22, timeout=20)
sin, sout, serr = ssh.exec_command(""" turbostat -S | awk '{print "%Busy:"$2, "Bzy_MHz:"$3, "CoreTmp:"$10, "PkgWatt:"$16}' """)
def line_buffered(f):
while not f.channel.exit_status_ready():
yield str(f.readline())
return flask.Response(line_buffered(sout), mimetype='text/plain')