使用我网站上的按钮运行 python 脚本 [重复]

Posted

技术标签:

【中文标题】使用我网站上的按钮运行 python 脚本 [重复]【英文标题】:Run python script with a button from my website [duplicate] 【发布时间】:2019-08-29 07:58:32 【问题描述】:

我目前正在尝试使用 Flask 创建一个仅包含一个按钮的网站(目前)。如果我按下该按钮,我想从特定路径或项目文件夹运行 python 脚本。我已经看过一些关于同一主题的帖子,但没有一个能真正帮助我。

我已经有了一些代码。 这是我的 Flask app.py

from flask import Flask, render_template, jsonify
import test

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')


if __name__ == '__main__':
app.run(debug=True)

这就是我的 index.html

<!DOCTYPE html>
<html>
 <head>
 </head>
 <body>
   <input type="button" id='script' name="scriptbutton" value=" Run Script " onclick="goPython()">

   <script src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

   <script>
       function goPython()
           $.ajax(
             type: 'POST',
             url: "/test.py",
             //or some other path like /scripts/test.py
             dataType: "text",
             success: function (data) 
               alert(data)
             ,
             error: function (data) 
               alert(data)
             
           );
       
   </script>
 </body>
</html>

如果我运行我的烧瓶网站并单击我想要执行保存在我的项目文件夹或其他地方的 test.py 的按钮。我不知道这是否可能,或者是否有更好的解决方案。现在我仍在尝试使用烧瓶,但我无法让我的 test.py 运行。 当我按下按钮时,它只会向我显示一个带有 [object Object] 的警报

基本上,我正在尝试构建一个带有按钮的网站,例如在后台运行我的脚本的服务,有时可能需要更多时间才能完成。 我不确定在这种情况下我是否误解了 ajax 的使用。 任何帮助都会很好。

【问题讨论】:

ajax 是前端,您需要做的是将信息传递到后端以便脚本运行,这是 url 和 post 请求在后端完成其工作的地方/tasks.pyflask 服务器的 url 然后你需要在你的代码中处理这个请求,运行你想要执行的脚本 好的,所以我必须在我的后端实现我的脚本?因为我正在寻找一种解决方案,只从特定路径调用我的 py。 你不必实现你的脚本,你必须在后端调用脚本,它可以作为url中的参数传递给你想要调用哪个脚本 啊,我明白了。我误解了 ajax 作为我的前端。我以为我可以用 Ajax 在我的 html 中调用我的 py。我完全忘记了在后端处理请求。谢谢。 【参考方案1】:

在按下按钮时运行代码的简单解决方案如下。如果您想在后台运行任务,请查看 celery 或 flask 中的线程。

from flask import Flask, render_template, jsonify
import test

app = Flask(__name__)

@app.route('/', methods=['POST', 'GET'])
def index():
    if request.method == "POST":
        <insert python script here>

    return render_template('index.html')

将您的模板更改为:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <form  method = "post">
     <input type="button" id='script' name="submit" value="Run Script">
    </form>
  </body>
</html>

【讨论】:

这是一个简单的解决方案,但我需要在我的 app.py 中实现我的 python 脚本。这不完全是我打算做的,因为我有其他脚本,我想让我的 app.py 保持简单。我想过在不必实际实现它们的情况下调用 python 脚本。 我在这里发现了一个关于在 Flask 中使用 subprocess 的问题,这可能对你有用,也许:***.com/questions/40388238/…【参考方案2】:

一些使用 Flask 函数、jQuery 和 Bootstrap 的示例(不是必需的,仅用于按钮格式)。希望这可以帮助你。

Python(在应用脚本中):

@app.route('/do_something')
def do_something():
  """
  Do something on button press.
  """
  # your code
  return res

javascript

var btnName = function() 
  $.get('/do_something',
    function(x) 
      $("#resBtnHere").html(x);
    
  )

btnName()

HTML 中的按钮:

<button
  type="button"
  class="btn btn-primary"
  onclick="btnName()"
>Click here
</button>

在 html 中,按下按钮时的功能结果(如果需要):

<p id="resBtnHere"></p>

【讨论】:

以上是关于使用我网站上的按钮运行 python 脚本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

通过单击提交按钮在 Django 网站中运行 Python 脚本

Python导入并运行位于不同目录中的python脚本[重复]

从网站上的 PHP 脚本运行 Java 类文件

Javascript/Python - 单击网站上的按钮并在 python 中运行函数

使用python和beautifulsoup4抓取网页后重复数据

python点击网页上的按钮