web-dev-qa-db-fra.com

Comment puis-je exécuter un script python à partir d'un bouton HTML?

J'ai un certain nombre de python que j'ai sauvegardés sur mon ordinateur). Par curiosité, j'ai créé un fichier html comportant un seul bouton. Au lieu d'aller dans le terminal et d'exécuter python <path to script> _, Je voudrais faire en sorte que lorsque ce bouton est cliqué, l’un de mes scripts python) est lancé. Est-ce possible/comment peut-on le faire?

à titre d'exemple, nous appellerons le script à exécuter MYSCRIPT.py. J'ai fait quelques recherches mais je n'ai rien trouvé de prometteur. Je suis conscient que le code suivant est incorrect, mais juste pour un point de départ, voici mon fichier 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
Justin Smith

Puisque vous avez demandé un moyen de compléter ceci dans une page HTML, je réponds à cela. Je pense qu'il n'est pas nécessaire de mentionner les avertissements sévères et les implications qui en découleraient. J'espère que vous connaissez la sécurité de votre script .py Mieux que moi :-)

J'utiliserais la fonction .ajax() dans la bibliothèque jQuery. Cela vous permettra d’appeler votre script Pythontant que le script se trouve dans le répertoire html accessible au public ... Cela dit, c’est la partie où je vous dis de respecter les mesures de sécurité. ...

<!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>

De plus .. Il est intéressant de noter que votre script devra avoir les autorisations appropriées pour, par exemple, l'utilisateur www-data Pour pouvoir l'exécuter ... Un chmod et/ou un chown peut être nécessaire.

4
Zak

Cela nécessiterait la connaissance d'une langue de site Web backend.

Heureusement, Flask Library de Python est un langage de base approprié pour le projet en cours.

Départ cette réponse à partir d'un autre thread.

1
Michael Dennis

Il existe différentes façons de le faire, une technique très simple avec la sécurité en tête, ici peut vous aider


1. Vous devez d'abord installer un flacon
pip install flask
dans l'invite de commande, qui est un microframework python), n'ayez pas peur d'avoir besoin d'une autre connaissance préalable pour apprendre cela, c'est très simple et avec seulement quelques lignes de code. Si vous souhaitez apprendre Flask rapidement pour un novice complet, voici le tutoriel que j’apprends aussi Tutoriel Flask pour débutant (YouTube)

2.Créez un nouveau dossier
- Le premier fichier sera 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 créez un autre sous-dossier dans le dossier précédent et nommez-le comme template le fichier sera votre fichier 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. . Pour exécuter, ouvrez Invite de commandes dans le répertoire Nouveau dossier, tapez python server.py pour exécuter le script, puis accédez au type de navigateur localhost:5000, alors vous verrez le bouton. Vous pouvez cliquer sur et router vers le fichier de script de destination que vous avez créé.

J'espère que cela vous aidera. Je vous remercie.

0
Phok Chanrithisak

C'est décourageant et problématique mais faisable. Ce dont vous avez besoin, c'est d'un schéma d'URI personnalisé Vous devez vous enregistrer et le configurer sur votre machine, puis accrocher une URL avec ce schéma au bouton.

Le schéma d'URI est la partie avant :// dans un URI. Les schémas d'URI standard sont par exemple https ou ftp ou file. Mais il y a des coutumes comme FX. mongodb. Ce dont vous avez besoin est votre propre, par exemple. mypythonscript. Il peut être configuré pour exécuter le script ou même simplement python avec le nom du script dans les paramètres, etc.). Il s’agit bien entendu d’un compromis entre flexibilité et sécurité.

Vous pouvez trouver plus de détails dans les liens:

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

EDIT: Ajout de plus de détails sur ce qu'est un schéma personnalisé.

0
Mieszko

Je l'ai fait exactement sous Windows. J'ai une page .html locale que j'utilise comme "tableau de bord" pour tout mon travail actuel. En plus des liens habituels, j'ai pu ajouter des liens cliquables ouvrant des documents MS-Word, des feuilles de calcul Excel, ouvrir mon IDE, ssh sur des serveurs, etc. C'est un peu compliqué, mais voici comment je l'ai fait ...

Tout d'abord, mettez à jour le registre Windows. Votre navigateur gère les protocoles habituels tels que http, https, ftp. Vous pouvez définir votre propre protocole et un gestionnaire à appeler lorsqu'un lien de ce type de protocole est cliqué. Voici la configuration (exécutée avec 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\""

Avec cela, quand j'ai un lien comme <a href="mydb:open:ProjectX.docx">ProjectX</a>, en cliquant dessus, vous invoquerez C:\_opt\Dashboard\Dashboard.vbs en lui transmettant le paramètre de ligne de commande open:ProjectX.docx. Mon code VBS examine ce paramètre et fait le nécessaire (dans ce cas, puisqu'il se termine par .docx, il appelle MS-Word avec ProjectX.docx comme paramètre.

Maintenant, j’ai écrit mon gestionnaire dans VBS uniquement parce que c’est un code très ancien (environ 15 ans). Je ne l'ai pas essayé, mais vous pourrez peut-être écrire un gestionnaire Python, Dashboard.py, au lieu. Je vous laisse le soin d'écrire votre propre gestionnaire. Pour vos scripts, votre lien pourrait être href="mydb:runpy:whatever.py" (le runpy: Le préfixe indique à votre handle de s’exécuter avec Python).

0
BareNakedCoder

Le meilleur moyen consiste à utiliser un Python Web Frame Work, vous pouvez choisir Django/Flask . Je vous suggère d'utiliser Django parce que c'est plus puissant. Voici comment procéder étape par étape:

pip install Django
django-admin createproject buttonpython

vous devez ensuite créer un nom de fichier views.py dans le répertoire buttonpython.

écrivez ci-dessous le code dans views.py:

from Django.http import HttpResponse

def sample(request):
    #your python script code
    output=code output
    return HttpResponse(output)

Une fois terminé, accédez à urls.py et ajoutez cette section

from . import views

path('', include('blog.urls')),

Maintenant, allez dans le répertoire parent et exécutez manage.py

python manage.py runserver 127.0.0.1:8001

Guide étape par étape en détail: Exécuter Python en cliquant sur le bouton HTML

0
kavin