web-dev-qa-db-fra.com

Exécuter le script Python à partir de AJAX ou JQuery

Nous avons besoin d'exécuter des scripts python à partir de Javascript. Nous devons passer une chaîne d'entrée au script python en tant qu'argument et afficher la sortie python sur notre page Web.

Voici le code Python, ce code fonctionne bien quand je lance ceci dans ma boîte Linux: ./sample.py 12345, donne le résultat 12345 et ./sample.py afficherait no argument found

#!/usr/bin/env python

import os
import sys

if len(sys.argv) > 1:
  output = sys.argv[1]
else:
  output = "no argument found"

print "Hello World!!!"
print output

Comment accéder au paramètre de l'appel ajax dans python ci-dessus et utiliser cette valeur comme argument?

Javascript:

$.ajax({
        type: 'POST',
        url: "scripts/sample.py",
        data: {param: xyz}, //passing some input here
        dataType: "text",
        success: function(response){
           output = response;
           alert(output);
        }
}).done(function(data){
    console.log(data);
    alert(data);
});

Toute aide serait grandement appréciée.

MODIFIER

Comme suggéré, j'essaye de faire fonctionner mon code en utilisant CGI.

#!/Python34/python

# Import modules for CGI handling 
import cgi, cgitb

# Create instance of FieldStorage 
data= cgi.FieldStorage()

# Get data from fields
output = data["param"]

# This will print to stdout for testing
print("Hello World!!!")
print(output)

Chaque fois que l'appel Ajax est exécuté, la réponse est: [objet HTMLDivElement], une fois ouvert dans Firebug, affiche le texte intégral du script python. Qu'est-ce que j'oublie ici?

14
ritusmart

Votre appel Ajax sera une requête Web (http) au script python. Votre script python doit donc écouter sur le port ces requêtes et y répondre. 

La méthode susmentionnée est recommandée, utilisez simple Web Server à l'intérieur de votre échantillon, py ou vous pouvez utiliser un existant tel que Flask (ou beaucoup d'autres). 

FYI - Pour votre simple tâche, je ne recommanderais pas Django (c'est un framework web gros et lourd avec beaucoup de cloches dont vous n'avez pas besoin).

5
Vlad Gulin

Obtenir les données des champs doit être fait comme suit:

# Get data from fields
output = data.getvalue("param")

En outre, j'ai constaté qu'il y avait ^ M problèmes de caractères lors de l'exécution, problème que j'ai résolu à l'aide de l'éditeur vi.

0
ritusmart

En toute transparence, je suis un contributeur à ce dépôt GitHub. J'ai pu résoudre ce problème en utilisant les déclencheurs WayScript AJAX:

Voir GitHub Repo pour les instructions: https://github.com/wayscript/ajax-to-python-example

0
Jay Ocean