【问题标题】:Python flask use buttons to trigger scriptsPython flask 使用按钮触发脚本
【发布时间】:2016-12-15 09:58:50
【问题描述】:

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

首先 - 我需要什么。我的公司在非技术人员使用的 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 服务器附近的出现最小化(系统管理员)。

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

我打算做的是,当有人访问网页时,我的“jps -lm |grep -v Jps”的值将被插入到 html 文件中。 当 html 准备好时,他们将被重定向到它,按下相应的按钮,“onclick=alert('are you sure?')” 将弹出,如果获得批准,将触发 “subprocess.Popen('kill '+procId,stdout.subprocess.PIPE,shell = True)”命令将终止进程,将它们重定向到我的脚本映射当前正在运行的java的页面,该页面会将它们重定向到按钮页面.

除了按钮部分,我什么都能做。不知道如何在按下后使其对 python 可用。

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

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

谢谢!

【问题讨论】:

  • 你应该设计flask url端点,它应该接受json有效负载,包含任何必要的信息(如命令及其参数)按下按钮。然后您的控制器可以执行适当的脚本
  • 我真的很难弄清楚,不明白为什么。你能帮我提供任何代码示例吗?对不起,如果它被认为是粗鲁或只是打扰。
  • 你必须在按下按钮时编写一个 ajax 请求(你可以阅读它)并将这个请求发送到你的烧瓶控制器,解析请求并获取相关参数。然后你可以执行那个脚本

标签: python linux button flask webpage


【解决方案1】:

看看下面的例子,希望对你有帮助

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

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

仅在您的应用使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2020-09-03
    • 1970-01-01
    • 2022-12-25
    • 2023-02-22
    • 1970-01-01
    相关资源
    最近更新 更多