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

时间:2018-01-31 22:14:42

标签: javascript python html

我有许多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>

8 个答案:

答案 0 :(得分:3)

由于您要求在 obj.eth0.server.address = setupObj.eth0.server.address ? setupObj.eth0.server.address : "10.0.0.1"; ^ TypeError: Cannot read property 'eth0' of undefined 页面内完成此操作,我正在回答此问题。我觉得没有必要提及与此相关的严重警告和暗示......我相信你比我更了解HTML脚本的安全性:-)

我会在.py库中使用.ajax()函数。只要脚本位于可公开访问的html目录中,这将允许您调用jQuery脚本 ...这就是我告诉您注意安全预防措施的部分。 ..

Python

此外..值得注意的是,您的脚本必须具有适当的权限,例如<!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可能是必要的。

答案 1 :(得分:1)

这需要了解后端网站语言。

幸运的是,Python的Flask Library是适合手头项目的后端语言。

从另一个帖子中查看this answer

答案 2 :(得分:0)

使用UI框架会更清晰(并且涉及更少的组件)。以下是使用wxPython的示例:

import wx
import os
class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Launch Scripts")
        panel = wx.Panel(self, wx.ID_ANY)
        sizer = wx.BoxSizer(wx.VERTICAL)
        buttonA = wx.Button(panel, id=wx.ID_ANY, label="App A", name="MYSCRIPT")
        buttonB = wx.Button(panel, id=wx.ID_ANY, label="App B", name="MYOtherSCRIPT")
        buttonC = wx.Button(panel, id=wx.ID_ANY, label="App C", name="SomeDifferentScript")
        buttons = [buttonA, buttonB, buttonC]

        for button in buttons:
            self.buildButtons(button, sizer)

        panel.SetSizer(sizer)

    def buildButtons(self, btn, sizer):
        btn.Bind(wx.EVT_BUTTON, self.onButton)
        sizer.Add(btn, 0, wx.ALL, 5)

    def onButton(self, event):
        """
        This method is fired when its corresponding button is pressed, taking the script from it's name
        """
        button = event.GetEventObject()

        os.system('python {}.py'.format(button.GetName()))

        button_id = event.GetId()
        button_by_id = self.FindWindowById(button_id)
        print "The button you pressed was labeled: " + button_by_id.GetLabel()
        print "The button's name is " + button_by_id.GetName()

# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

我还没有测试过这个,我确信有更简洁的方法从python脚本启动python脚本,但我认为这个想法仍然有用。祝你好运!

答案 3 :(得分:0)

这是沮丧和有问题但可行的。你需要的是一个自定义的URI方案,即。您需要在计算机上注册和配置它,然后将具有该方案的URL挂钩到按钮。

URI方案是URI中://之前的部分。标准URI方案例如是httpsftpfile。但有像fx这样的习惯。 mongodb。你需要的是你自己的,例如mypythonscript。它可以配置为执行脚本甚至只是python与params等中的脚本名称。它当然是灵活性和安全性之间的权衡。

您可以在链接中找到更多详细信息:

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

编辑:添加了有关自定义方案的详细信息。

答案 4 :(得分: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结尾,它调用带有ProjectX.docx的MS-Word作为参数。

现在,我在VBS编写处理程序只是因为它是非常古老的代码(比如15年以上)。我没有尝试过,但你可能会编写一个Python处理程序Dashboard.py。我会留给你写自己的处理程序。对于您的脚本,您的链接可以是href="mydb:runpy:whatever.py"runpy:前缀告诉您的句柄使用Python运行。)

答案 5 :(得分:0)

可以通过多种方式完成此任务,同时考虑到安全性非常简单的技术,这里可能对您有所帮助


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,然后将看到按钮。您可以单击并路由到您创建的目标脚本文件。

希望这会有所帮助。谢谢。

答案 6 :(得分:0)

最好的方法是使用Python Web Frame Work,您可以选择 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

答案 7 :(得分:0)

您可以使用文本文件通过PHP传输数据并在python中读取文本文件