如何从一个html按钮中执行一个python脚本?

38 人关注

我有一些保存在电脑上的python脚本,出于好奇,我创建了一个只有一个按钮的html文件。我想让它在点击那个按钮的时候,启动我的一个python脚本,而不是进入终端运行 python <path to script> ,这样就可以了。这可能吗/如何做到?

例如,我们把要运行的脚本称为 MYSCRIPT.py 。我已经做了一些研究,但没有发现任何有价值的东西。我知道下面的代码是不正确的,但只是作为一个起点,这是我的HTML文件。

<!DOCTYPE html>
           <input type="button" id='script' name="scriptbutton" value=" Run Script " onclick="exec('python MYSCRIPT.py');">
        </head>
    </body>
</html>
    
5 个评论
网页不允许运行shell命令,因为这将非常危险。想象一下,去一个可以在你的shell中运行任何命令的网站。你需要的是一个服务器,你向它发送一个请求,服务器在那里运行命令。
你需要使用AJAX来调用该脚本。
Just found this 在另一个帖子中,也许会有帮助。
azro
身体在头之后,而不是在里面
javascript
python
html
Justin Smith
Justin Smith
发布于 2018-02-01
7 个回答
Chanrithisak PHOK
Chanrithisak PHOK
发布于 2020-04-07
已采纳
0 人赞同

有各种方法可以做到这一点,非常简单的技术,并考虑到安全问题,这里可能对你有帮助

1. 首先你需要安装 闪光灯
pip install flask
在你的命令提示符中,这是一个Python微框架,不要害怕你需要有其他的知识来学习,这真的很简单,只是几行代码。 If you wish you learn 闪光灯 quickly for complete novice here is the tutorial that I also learn from 闪光灯 Tutorial for beginner (YouTube)

2.创建一个新的文件夹
- 1st file will be 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)

3. .要运行,打开命令提示符到 New folder 目录中,输入 python server.py 来运行脚本,然后在浏览器中输入 localhost:5000 ,然后你会看到按钮。你可以点击它并将其传送到你所创建的目标脚本文件。

希望这有帮助。谢谢。

Zak
Zak
发布于 2020-04-07
0 人赞同

既然你要求在一个 HTML 的页面中完成这个任务,我就回答这个问题。 我觉得没有必要提及与此相关的严重警告和影响,我相信你比我更了解你的 .py 脚本的安全性 :-)

我将使用 .ajax() 库中的 jQuery 函数。 这将使你能够调用你的 Python 脚本 只要脚本在公开可访问的html目录下就可以了。 ... 这就是说,这是我告诉你注意安全预防措施的部分......。

<!DOCTYPE html>
  </head>
    <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,和/或一个chown可能是必要的。

如果这是一个带有网络服务器的脚本,如flask或django,这主要会有危险吗?如果这只是一个简单的html文件和python文件,在同一目录下,在本地机器上运行一个脚本......这就不会有危险,或者我错过了什么?
Zak
唯一的安全风险是所有服务器端的文件都存在的风险。 如果有人能够访问该文件 directly 并操纵输入/注入以获得可能显示敏感信息的结果,如服务器目录结构或数据库内的表格。
Zak
-- 这是编程的问题 within 替换代码0】文件,如果不适当地锁定,就会有安全风险。 通常情况下,如果它已经是一个框架的一部分,这些安全问题大多已经在框架内得到解决。
因此,假设该项目涉及的唯一部分是一个带有按钮的简单html文件和一个在本地机器上点击运行的python脚本......最大的安全问题是有人未经授权访问了该文件。
这并不奏效。我收到了一个405的错误回复。我想我需要一个后端解决方案才能工作,因为从前端调用一个.py文件并不工作。
kavin
kavin
发布于 2020-04-07
0 人赞同

最好的方法是使用Python网络框架工作,你可以选择 Django/Flask . I will suggest you to Use Django 因为它更强大。 以下是完成任务的步骤指南。

pip install django
django-admin createproject buttonpython

那么你必须在buttonpython目录下创建一个名为views.py的文件。

write below code in 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

Michael Dennis
Michael Dennis
发布于 2020-04-07
0 人赞同

这将需要有后台网站语言的知识。

幸运的是,Python的 烧瓶图书馆 是一种适合手头项目的后端语言。

Check out 这个答案 来自另一个主题。

BareNakedCoder
BareNakedCoder
发布于 2020-04-07
0 人赞同

我在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结尾,它调用MS-Word,以ProjectX.docx作为它的参数。

现在,我用VBS写了我的处理程序,只是因为它是非常古老的代码(比如15年以上)。 我没有试过,但你也许可以写一个Python处理程序,Dashboard.py,代替它。 我让你来写你自己的处理程序。 对于你的脚本,你的链接可以是href="mydb:runpy:whatever.py"runpy:的前缀告诉你的处理程序要用Python运行)。

Mieszko
Mieszko
发布于 2020-04-07
0 人赞同

这是不鼓励的,有问题的,但也是可以做到的。你需要的是一个自定义的URI方案,即你需要在你的机器上注册和配置它,然后用这个方案把一个URL挂到按钮上。

URI方案是URI中 :// 之前的部分。标准的URI方案是,例如 https ftp file 。但也有自定义的,如fx。 mongodb 。你所需要的是你自己的,例如: mypythonscript 。它可以被配置为执行脚本,甚至只是在params中加入脚本名称的python等等。当然,这是在灵活性和安全性之间的一个权衡。

你可以在链接中找到更多细节。

https://support.shotgunsoftware.com/hc/en-us/articles/219031308-Launching-applications-using-custom-browser-protocols