Python烧瓶使用按钮来触发脚本

时间:2016-08-09 11:21:33

标签: python linux button flask webpage

我正在调查网络,主要是让我对几件事感到困惑。

首先 - 我需要什么。我的公司在非技术人员使用的linux服务器上运行java应用程序。有时我们必须重新启动这些程序,但首先要杀死它们。

我已经构建了一个小工具(在linux上运行),它使用" jps -lm | grep -v Jps"恢复所有java进程,然后使用分割和模式来制作看起来像它的东西:

You have those programs running:
1. Java A
2. Java B
3. Java C
4. Exit
5. Refresh

他们选择一个号码,它要求批准,如果允许的话,杀死进程(" kill procId")并重新启动(while循环直到他们输入4触发" break")

现在,我想把它带到上面的一个层次,使用网络浏览器来最小化它们在我的linux服务器(sys admin)附近的外观。

现在,我发现烧瓶对我来说很棒,创建了一个网页,甚至设法让它在整个网络上都可用。

我打算做的是我的" jps -lm | grep -v Jps"当有人到达网页时,会被插入到html文件中。 当html准备好后,他们将被重定向到它,按下相应的按钮," onclick = alert('你确定吗?')"将弹出,如果批准将触发a " subprocess.Popen(' kill' + procId,stdout.subprocess.PIPE,shell = True)"将杀死进程的命令,将它们重定向到我的脚本映射当前运行的java的页面,该java将它们重定向到按钮页面。

我能够做除按钮部分以外的所有事情。不知道如何在按下之后将它提供给python。

会恭喜任何帮助。对于映射脚本,我打算使用此解决方案:Create a hyperlink (or button) that executes a python script and then redirects when script completes

抱歉,如果我的问题构建得很糟糕,那么也会对此提出任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

看一下下面的例子我希望有帮助

如果您使用内联javascript,则不必使用此变量,并且可以从ajax请求访问url_for()。如果您使用单独的javascript文件,则必须将此变量放在模板中,因为.js文件无法呈现jinja2代码,如{{}}

var flask_endpoint = "{{url_for('endpoint_name')}}"

仅在您的APP使用CSRF的情况下使用:

var csrftoken = "{{ csrf_token() }}";

    $.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken)
            }
        }
    })

如果不是那么跳过

您的javascript应该如下所示(您不必使用done()回调

$('#button-id').on('click', function(){

   var data = {'key': 'some value'};

   $.ajax({
       type : "POST",
       url : flask_endpoint,
       data: JSON.stringify(data),
       contentType: 'application/json;charset=UTF-8',
   }).done(function (result) {
       alert(result);
   });

   alert('data has been sent to the server');
});

下面是你的python代码应该是什么样子

from flask import request
@app.route('/ajax_endpoint', methods=['POST', 'GET'])
def endpoint_name():
    # check if the request type is POST (we defined POST for our ajax request)
    if request.method == 'POST':
        data = request.form['key'] # this is the key in our data object

        # do whatever you want with the data