【问题标题】:Connecting python script with html button and flask使用 html 按钮和烧瓶连接 python 脚本
【发布时间】:2020-11-19 10:35:32
【问题描述】:

我正在尝试创建一个 web 应用程序并且对它相当陌生。我有一个 python 脚本(file.py),可以转换用户选择的数据。它处理所有的输入和输出。

我将flask(main.py) 用于它的服务器部分和html。我想在我的 html 代码中放置一个按钮,以便开始执行 file.py。任何人都可以帮助我为 3 之间的连接设置示例吗?

我查看了其他示例,但我无法重新创建它,因为它们正在做不同的事情。另外,file.py 相当大,所以我想避免将它放入函数中。

编辑:不是在寻找烧瓶教程。我尝试了 3 件事:

  1. shell 会弹出半秒钟,但消失了。然后我被重定向到一个页面,该页面仅包含我的返回语句中的文本 在我的 html 文件中
<form action="/pic" method="POST">
    <input type="submit" value="GET THE SCRIPT">
</form>

在我的 main.py 烧瓶文件中

@app.route('/pic', methods=['GET', 'POST'])
def pic():
    os.system("python file.py") #file.py is the script I'm trying to start
    return "done"
  1. 什么都不做。 在 html 文件中:
    <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({
              url: "/scripts/file.py",
             context: document.body
            }).done(function() {
             alert('finished python script');;
            });
        }
    </script>
  1. 我收到一条 GET "/scripts/file.py HTTP/1.1" 404 消息。我的脚本文件夹与模板文件夹位于同一目录中。还尝试将脚本文件夹放在模板文件夹中。

在html中


<form  action="/run" method = "POST">
     <input type="button" id='script' name="submit" value="Run Scripttttttt">
    </form>

在烧瓶 main.py 中

@app.route('/run',methods=['GET', 'POST'])
def index():
    def inner():
         proc = subprocess.Popen(
            ['python file.py'],             
            shell=True,
            stdout=subprocess.PIPE
        )
         for line in iter(proc.stdout.readline,''):
            time.sleep(1)                          
            yield line.rstrip() + '<br/>\n'

    return Flask.Response(inner(), mimetype='text/html') 

【问题讨论】:

  • 这太宽泛了,无法在堆栈溢出的一个答案中涵盖。您应该查找有关构建 Web 应用程序的教程。也许一个好的烧瓶教程涵盖了你所需要的一切。您还需要了解 html 表单并至少了解 http 工作原理的基础知识。
  • 从这里开始youtube.com/watch?v=MwZwr5Tvyxo 并完成所有视频。如果您仍然不确定,请返回。 Corey 将为您提供我认为您需要回答问题的所有工具。
  • 你的按钮可以是“表单”的一部分,看看:flask-wtf.readthedocs.io/en/stable/…

标签: python html web flask button


【解决方案1】:

您可以设置一个 Flask 端点,您的按钮可以向该端点发送请求。然后让端点的函数调用你的 python 脚本。

看看这个关于Flask - Calling python function on button OnClick event 的讨论和这个关于How can I make one python file run another? 的讨论,让你开始。

【讨论】:

  • 嗨,我添加了一个编辑,显示了我尝试过的一些事情。
【解决方案2】:

使用 HTML Anchor 标签(即 )是最简单的方法。这是一个例子:

<a href="your_flask_route">This is a link</a>

但既然您选择了按钮,JavaScript 就会派上用场。这是一个示例(内联):

<button onclick="window.location.href='your_flask_route';">
  This is a link
</button>

然后在你的烧瓶 main.py 文件中你应该有这个:

@app.route('/your_flask_route')
def your_flask_route():
    '''some lines of code'''

【讨论】:

  • 我尝试添加一个 os.system 来执行 python 脚本。一个 shell 随即弹出,然后我被重定向到一个仅在我的 return 语句中显示文本的页面。
  • 我在我的函数中使用了 subprocess.call... 而不是 os.system... 它使用您的示例工作。非常感谢
猜你喜欢
  • 1970-01-01
  • 2013-11-16
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2016-03-19
相关资源
最近更新 更多