以下代码显示了一个页面,您可以在其中输入IP地址,并在提交后执行OS ping命令,并启动一个新页面,显示生成的输出。这可行,但是我不想让输出显示在单独的页面上,而是希望使其与表单显示在同一页面上。在Flask中如何实现?
@app.route('/ping',methods=['GET','POST'])
def ping():
form = PingForm()
if form.is_submitted():
return redirect(url_for('ping') + '/' + form.ipaddr.data,307)
return render_template('ping.html', title='Ping', form=form)
@app.route('/ping/<ip_address>',methods=['GET','POST'])
def ping_ip(ip_address):
def inner():
proc = subprocess.Popen(
['ping','-c5',ip_address],
shell=False,
stdout=subprocess.PIPE
)
for line in iter(proc.stdout.readline,''):
if not proc.poll() == None:
break
yield line.decode().rstrip() + '<br/>\n'
return Response(inner(), mimetype='text/html')