如何从 html 按钮执行 python 脚本?
Posted
技术标签:
【中文标题】如何从 html 按钮执行 python 脚本?【英文标题】:How can I execute a python script from an html button? 【发布时间】:2018-07-11 03:55:57 【问题描述】:我在我的计算机上保存了许多 python 脚本,出于好奇,我创建了一个只有一个按钮的 html 文件。而不是进入终端并运行python <path to script>
,我想这样做,所以当单击该按钮时,会启动我的一个python脚本。这可能/怎么做?
例如,我们将调用要运行的脚本MYSCRIPT.py
。我做了一些研究,但没有提出任何有希望的结果。我知道下面的代码是不正确的,但只是作为一个起点,这里是我的 html 文件。
<!DOCTYPE html>
<html>
<body>
<head>
<input type="button" id='script' name="scriptbutton" value=" Run Script " onclick="exec('python MYSCRIPT.py');">
</head>
</body>
</html>
【问题讨论】:
不允许网页运行 shell 命令,因为那样会非常危险。图像转到可以在您的 shell 中运行任何命令的站点。你需要的是一个服务器,你向它发送请求,服务器在那里运行命令。 Running Python scripts from HTML button的可能重复 您需要使用 AJAX 来调用脚本。 刚刚在另一个帖子中找到this,也许会有所帮助。 身体在头部之后,而不是在里面 【参考方案1】:有多种方法可以完成,非常简单的技术,考虑到安全性,这里可能会对您有所帮助
1.首先你需要安装Flask pip install flask
在你的命令提示符下,这是一个python微框架,不要害怕您需要具备其他先验知识才能学习它,它非常简单,只需几行代码。
如果您希望完全新手快速学习 Flask,这里是我也从 Flask Tutorial for beginner (YouTube) 学习的教程
2.新建文件夹
- 第一个文件将是
server.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/my-link/')
def my_link():
print ('I got clicked!')
return 'Click.'
if __name__ == '__main__':
app.run(debug=True)
-2nd 在上一个文件夹中创建另一个子文件夹并将其命名为 templates 文件将是您的 html 文件index.html
<!doctype html>
<head><title>Test</title>
<meta charset=utf-8> </head>
<body>
<h1>My Website</h1>
<form action="/my-link/">
<input type="submit" value="Click me" />
</form>
<button> <a href="/my-link/">Click me</a></button>
</body>
3.。要运行,打开命令提示符到New folder目录,输入python server.py
运行脚本,然后在浏览器输入localhost:5000
,然后你会看到按钮。您可以单击并路由到您创建的目标脚本文件。
希望这有帮助。谢谢。
【讨论】:
【参考方案2】:由于您要求在HTML
页面内完成此操作,因此我正在回答这个问题。我觉得没有必要提及随之而来的严重警告和影响.. 我相信您比我更了解.py
脚本的安全性:-)
我会使用jQuery
库中的.ajax()
函数。这将允许您调用您的 Python
脚本只要该脚本位于可公开访问的 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(
url: "MYSCRIPT.py",
context: document.body
).done(function()
alert('finished python script');;
);
</script>
</body>
</html>
此外 .. 值得注意的是,您的脚本必须具有适当的权限,例如,www-data
用户才能运行它...chmod
,和/或@987654329 @ 可能是必要的。
【讨论】:
如果这是一个带有正确 Web 服务器的脚本(如烧瓶或 django),这主要是危险的?如果这只是在同一目录中的一个简单的 html 文件和 python 文件,在本地机器上运行脚本......这不会很危险,或者我错过了什么 唯一的安全风险是所有服务器端文件都存在的风险。如果有人可以直接访问文件并操作输入/注入以获得可能显示敏感信息的结果,例如服务器目录结构或数据库中的表。 -- 如果没有正确锁定,则可能是.py
文件内 内的编程。通常,如果它已经是框架的一部分,那么大多数安全问题已经在框架内得到解决。
明白了。因此,假设项目中涉及的唯一部分是一个简单的 html 文件,其中包含一个按钮和一个在本地机器上运行 onclick 的 python 脚本......最大的安全问题是未经授权的人访问该文件。
这不起作用。我收到 405 错误响应。我想我需要一个后端解决方案才能工作,因为从前端调用 .py 文件不起作用。【参考方案3】:
这需要了解后端网站语言。
幸运的是,Python 的Flask Library 是适合手头项目的后端语言。
从另一个线程签出this answer。
【讨论】:
【参考方案4】:最好的方法是使用 Python 网络框架,你可以选择 Django/Flask。我会建议你使用 Django 因为它更强大。 这是完成任务的分步指南:
pip install django
django-admin createproject buttonpython
那么你必须在buttonpython目录下创建一个文件名views.py。
在views.py中编写以下代码:
from django.http import HttpResponse
def sample(request):
#your python script code
output=code output
return HttpResponse(output)
完成后导航到 urls.py 并添加此节
from . import views
path('', include('blog.urls')),
现在到父目录执行manage.py
python manage.py runserver 127.0.0.1:8001
详细分步指南:Run Python script on clicking HTML button
【讨论】:
【参考方案5】:这是不鼓励和有问题但可行的。您需要的是自定义 URI 方案,即。您需要在您的机器上注册和配置它,然后将带有该方案的 url 挂钩到按钮。
URI方案是URI中://
之前的部分。标准 URI 方案例如是 https
或 ftp
或 file
。但是也有像fx这样的习惯。 mongodb
。你需要的是你自己的,例如mypythonscript
。它可以被配置为执行脚本,甚至只是在参数等中带有脚本名称的python。这当然是灵活性和安全性之间的权衡。
您可以在链接中找到更多详细信息:
https://support.shotgunsoftware.com/hc/en-us/articles/219031308-Launching-applications-using-custom-browser-protocols
https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx
编辑:添加了有关自定义方案是什么的更多详细信息。
【讨论】:
【参考方案6】:我在 Windows 上完全做到了这一点。我有一个本地 .html 页面,用作我当前所有工作的“仪表板”。除了通常的链接之外,我还能够添加可点击的链接,这些链接可以打开 MS-Word 文档、Excel 电子表格、打开我的 IDE、ssh 到服务器等。这有点涉及,但我是这样做的……
首先,更新 Windows 注册表。您的浏览器处理常见的协议,如 http、https、ftp。您可以定义自己的协议和在单击该协议类型的链接时要调用的处理程序。这是配置(使用regedit
运行)
[HKEY_CLASSES_ROOT\mydb]
@="URL:MyDB Document"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\mydb\shell]
@="open"
[HKEY_CLASSES_ROOT\mydb\shell\open]
[HKEY_CLASSES_ROOT\mydb\shell\open\command]
@="wscript C:\_opt\Dashboard\Dashboard.vbs \"%1\""
有了这个,当我有一个像<a href="mydb:open:ProjectX.docx">ProjectX</a>
这样的链接时,点击它会调用C:\_opt\Dashboard\Dashboard.vbs
传递命令行参数open:ProjectX.docx
。我的 VBS 代码查看此参数并执行必要的操作(在这种情况下,因为它以 .docx 结尾,所以它以 ProjectX.docx
作为参数调用 MS-Word。
现在,我在 VBS 中编写了我的处理程序,只是因为它是非常古老的代码(比如 15 年以上)。我还没有尝试过,但您也许可以编写一个 Python 处理程序,Dashboard.py
,而不是。我将由您自己编写处理程序。对于您的脚本,您的链接可以是 href="mydb:runpy:whatever.py"
(runpy:
前缀告诉您的句柄使用 Python 运行)。
【讨论】:
【参考方案7】:您可以使用文本文件通过 php 传输数据并在 python 中读取文本文件
【讨论】:
以上是关于如何从 html 按钮执行 python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章