如何在Flask中的表单的同一页面上显示外部命令输出?

时间:2018-08-06 15:28:48

标签: flask

以下代码显示了一个页面,您可以在其中输入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')

0 个答案:

没有答案