2011-04-15 2 views
0

Est-il possible d'utiliser des fichiers exécutables avec Django? Par exemple j'ai un formulaire Django qui prend en entrée un fichier. Je veux passer le fichier en tant qu'argument à un script/exécutable/programme et renvoyer les résultats avec django. Quel serait un bon point de départ pour cette idée? Merci beaucoupfichiers exécutables et django

+0

Que signifie "exécutable" signifie ici? Binaire? Scénario? Que veux-tu dire exactement? En outre, comment allez-vous empêcher les problèmes de sécurité sans fin que cela représente? –

+0

Par exécutable, je veux dire une application comme l'exemple suivant: Je prends une image/fichier en entrée passer l'image/fichier comme un argument à l'application et modifier l'image. – Bigdinrock

+0

Donc, "fichiers exécutables avec Django" signifie un script ou un code Python qui fonctionne? Tout script ou code Python peut être utilisé avec le Python qui fait partie de Django. Qu'est-ce que ** exactement ** vous fait perdre à propos de l'écriture de code Python pour cela? –

Répondre

1

La question que vous devriez vous poser est possible en python. Essentiellement, tout ce que vous auriez besoin de le faire prend les entrées, dans un script python que vous pouvez appeler depuis votre vue django ou autre. Une fois là exécutez la commande subprocess d'exécution avec votre exécutable, et prenez dans les résultats. :)

Goodluck.

+0

"est-ce possible en python". Vrai - la question concerne le langage Python, pas Django le framework. Cependant, c'est une question * inutile * à poser. Tout est possible en Python - la question est de savoir combien de travail, combien de risques et combien de trous de sécurité. –

0

Oui, vous pouvez le faire. Il y a plusieurs façons de le faire en Python. Si vous voulez lire la sortie et l'utiliser, alors vous voulez probablement popen, trouvé à http://docs.python.org/library/os.html#os.popen

Attention, cela peut être très dangereux. Si les données ajoutées à la ligne de commande sont malveillantes (même accidentellement), vous risquez de provoquer de mauvaises choses sur le serveur. Vous donnez effectivement aux personnes qui soumettent des formulaires la possibilité d'exécuter des commandes sur le serveur avec les mêmes autorisations que le serveur Web.

import os 
ls_fd = os.popen('ls -l /tmp') 
output = ls_fd.read() 
ls_fd.close() 

De cette façon, votre fichier ls_fd est un objet similaire à un fichier. vous lisez() comme un fichier. Vous ne pouvez le faire qu'une seule fois, alors vous êtes à la fin du fichier. De même, vous devriez .close() quand vous avez terminé.

Considérons fortement l'ajout d'une entrée utilisateur à la ligne de commande. Vous pouvez créer une liste d'options possibles, puis donner à l'utilisateur le choix qu'il souhaite. Ensuite, au lieu de prendre l'entrée de l'utilisateur et de l'ajouter à la fin de la ligne de commande, vous pouvez utiliser l'une de vos lignes de commande préconfigurées et l'exécuter.

+0

Je ne souhaite pas utiliser l'entrée pour la ligne de commande. Je veux le passer en argument à une application. – Bigdinrock

+0

si vous l'ajoutez comme un argument alors il fait toujours partie de la ligne de commande et doit être traité avec précaution. Par exemple: cmd = 'ls -l% s'% arg – newz2000

1

voulez-vous des choses comme ça?

>>> import commands 
>>> commands.getstatusoutput('pwd') 
(0, '/home/efazati') 
+0

oui quelque chose comme ça mais pas avec une commande unix standard comme pwd mais avec un script personnalisé comme ./myscript – Bigdinrock

+0

@Bigdinrock son terminal ... vous pouvez utiliser tout – Efazati

Questions connexes