2011-11-07 3 views
0

Je suis en train d'essayer de faire en sorte que Python charge un module dépendant de quelle page est demandée depuis un navigateur, je l'ai si le fichier .py est à la racine du script pour le faire fonctionner si c'est dans un sous-répertoire.Python - Chargement du module dans un serveur Web Python

Les fichiers html fonctionnent partout, j'apprécie si quelqu'un pourrait m'aider à obtenir les fichiers python à travailler à partir de n'importe quel répertoire.

im en cours d'exécution Python 2.7 sur win 7 64 bits SP1

import string,cgi,time 
from os import curdir, sep 
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 
import os 
import mimetypes 

#import pri 
port = 888 
host = "0.0.0.0" 

class MyHandler(BaseHTTPRequestHandler): 

def do_GET(self): 
    try: 
     #RequestedURL = self.path 
     mimeType = mimetypes.guess_type(self.path)[0] 
     fileType = mimetypes.guess_extension(mimeType) 
     infoList = [mimeType, fileType] 

     if infoList[1] != ".py": 
      self.send_response(200) 
      self.send_header('Content-type', mimeType) 
      self.end_headers() 
      f = open(curdir + sep + self.path, "rb") 
      self.wfile.write(f.read()) 
      f.close() 
      return 

     if fileType == ".py": 
      pythonFilename = self.path.lstrip("/") 
      self.send_response(200) 
      self.send_header('Content-type', 'text/html') 
      self.end_headers() 
      pyname = pythonFilename.replace("/", ".")[:-3] 
      print pythonFilename 
      print pyname 
      temp1 = pyname.split(".") 
      temp2 = temp1[-1] 
      print temp2 
      module = __import__(root.index) 
      self.wfile.write(module.root.index.do_work()) 
      #module = __import__("test.index") 
      #self.wfile.write(module.index.do_work()) 
      return 

     return 

    except IOError: 
     self.send_error(404,'File Not Found: %s' % self.path) 


def do_POST(self): 
    global rootnode 
    try: 
     ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) 
     if ctype == 'multipart/form-data': 
      query=cgi.parse_multipart(self.rfile, pdict) 
     self.send_response(301) 

     self.end_headers() 
     upfilecontent = query.get('upfile') 
     print "filecontent", upfilecontent[0] 
     self.wfile.write("<HTML>POST OK.<BR><BR>"); 
     self.wfile.write(upfilecontent[0]); 

    except : 
     pass 

def main(): 
try: 
    server = HTTPServer((host, port), MyHandler) 
    print 'started httpserver:' 
    print ("Host: " + (host)) 
    print ("Port: " + str(port)) 

    server.serve_forever() 
except KeyboardInterrupt: 
    print '^C received, shutting down server' 
    server.socket.close() 

if __name__ == '__main__': 
main() 

Répondre

2

La première chose à faire est de vous assurer que le sous-répertoire a un fichier nommé

__init__.py 

en elle. Ce fichier peut être vide, mais vous ne serez pas en mesure de faire des importations sans elle. Ensuite, vous devez savoir que si vous importez à partir d'un sous-répertoire, vous devez inclure quelque chose comme

module = __import__("subdirectory.jack2") 

qui est, vous aurez besoin d'inclure le nom du sous-répertoire du module est stocké lors de l'importation du module.

Si vous souhaitez importer depuis un répertoire qui n'est pas un sous-répertoire du répertoire dans lequel vous travaillez, vous devez vous assurer qu'il est inclus dans le chemin python. Vous pouvez modifier le chemin en définissant sys.path en important simplement le module sys, et l'ajout d'un nouveau chemin d'accès à l'endroit où vos modules sont stockés:

import sys 
sys.path.append("full/path/to/directory/to/import/from") 

Modifier en réponse aux commentaires:

Lorsque vous utilisez la builtin function __import__, il est important de réaliser qu'il renvoie le module de niveau supérieur, pas celui que vous souhaitez importer. Donc, si vous voulez accéder au module que vous venez d'importer, vous aurez besoin de faire quelque chose comme ceci:

module = __import__("mymodule") 
result = module.mymodule.myfunction() 
+0

Merci, j'ai essayé et je reçois cette erreur –

+0

fichier « C: \ Python27 \ lib \ SocketServer.py ", ligne 284, dans _handle_request_noblock self.process_request (request, client_address) –

+0

Quelle était l'erreur réelle? C'est juste l'emplacement de l'erreur. – Wilduck