2017-04-20 4 views
0

Je voudrais créer un bouton qui lors du lancement d'un script python. Ce script ouvre un fichier data.txt et le transforme en json pour que je puisse l'intégrer dans ma base de données à l'avenir. Ce que je veux faire aujourd'hui est juste de créer un bouton qui lors du clic commence le script (je vérifierais dans mes documents si le fichier json result.txt a été créé ce qui me permet de vérifier si la fonction fonctionne). Voici ce que je l'ai fait:Exécuter le script python dans le site Web Django en cliquant sur le bouton soumettre

Dans urls.py

url(r'whatever^$', views.recup_wos, name='recup_wos'), 

Dans views.py

def recup_wos(request): 
    if request.method == 'POST': 
     import newscript.py 
     os.system('python newscript.py') 
    return redirect('accueil') 

Modèle accueil.html

<form action='{% url recup_wos %}' method="POST"> 
    <input value="Executer" type="submit"> 
</form> 

Le message d'erreur est le suivant:

Reverse for '' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

enter image description here

Je pense que l'erreur est principalement dans la vue, peut-être une erreur de syntaxe?


J'ai modifié mon modèle et mon affichage. Il fait le bien de redirection mais le script ne se lance pas:

def recup_wos(request): 
if request.method == 'POST': 
    os.system('Python newscript.py') 
return redirect('../page/accueil') 
+0

'Python newscript.py'' semble faux - ne devrait-il pas être' python newscript.py'? – Alasdair

Répondre

3

Vous devez utiliser des guillemets lors de l'utilisation des chaînes avec l'étiquette de modèle url:

{% url "recup_wos" %} 

On ne sait pas pourquoi vous essayez d'exécuter un python script utilisant system. Comme il est un script Python, il pourrait être préférable de

from newscript import do_stuff 

def recup_wos(request): 
    if request.method == 'POST': 
     do_stuff() 
    return redirect('../page/accueil') 

Si cela est impossible, vous pouvez alors utiliser subprocess au lieu de os.system pour exécuter la commande. Si cela échoue, vous devriez obtenir un retraçage qui pourrait aider à identifier le problème.

import subprocess 

def recup_wos(request): 
    if request.method == 'POST': 
     subprocess.check_call(['python', 'newscript.py']) # nb lowercase 'python' 
    return redirect('../page/accueil')