2016-10-01 7 views
5

यह मेरा python3 परियोजना hiearchy है:एक HTTP सर्वर कैसे चलाएं जो एक विशिष्ट पथ की सेवा करता है?

projet 
    \ 
    script.py 
    web 
    \ 
    index.html 

script.py से, मैं जो web फ़ोल्डर की सामग्री उपलब्ध करा एक http सर्वर को चलाने के लिए चाहते हैं।

Here एक सरल http सर्वर को चलाने के लिए इस कोड को सुझाव दिया है:

import http.server 
import socketserver 

PORT = 8000 
Handler = http.server.SimpleHTTPRequestHandler 
httpd = socketserver.TCPServer(("", PORT), Handler) 
print("serving at port", PORT) 
httpd.serve_forever() 

लेकिन यह वास्तव में project की सेवा, नहीं web। मैं उस फ़ोल्डर का पथ कैसे निर्दिष्ट कर सकता हूं जिसे मैं सेवा देना चाहता हूं?

+0

किया आप वास्तव में बाकी दस्तावेज़ों को पढ़ते हैं? –

उत्तर

7

https://docs.python.org/3/library/http.server.html#http.server.SimpleHTTPRequestHandler

इस वर्ग के मौजूदा निर्देशिका से फ़ाइलों में कार्य करता है और नीचे, सीधे HTTP अनुरोध करने के लिए निर्देशिका संरचना मानचित्रण।

तो आप बस सर्वर शुरू करने से पहले वर्तमान निर्देशिका बदलने की जरूरत है - देखना os.chdir

जैसे:

import http.server 
import socketserver 
import os 

PORT = 8000 

web_dir = os.path.join(os.path.dirname(__file__), 'web') 
os.chdir(web_dir) 

Handler = http.server.SimpleHTTPRequestHandler 
httpd = socketserver.TCPServer(("", PORT), Handler) 
print("serving at port", PORT) 
httpd.serve_forever() 
+0

धन्यवाद! नोट: मैंने कोशिश की: 'httpd.serve_forever(); कीबोर्ड इंटरप्ट को छोड़कर: पास; पोर्ट बंद करने के लिए httpd.server_close() '। – roipoussiere

4

तुम सिर्फ स्थिर फ़ाइल की सेवा चाहते हैं तो आप यह SimpleHTTPServer चलाकर कर सकते हैं मॉड्यूल:

python -m SimpleHTTPServer 

इस तरह आपको किसी भी स्क्रिप्ट को लिखने की आवश्यकता नहीं है।

try 
    # python 2 
    from SimpleHTTPServer import SimpleHTTPRequestHandler 
    from BaseHTTPServer import HTTPServer as BaseHTTPServer 
except ImportError: 
    # python 3 
    from http.server import HTTPServer as BaseHTTPServer, SimpleHTTPRequestHandler 


class HTTPHandler(SimpleHTTPRequestHandler): 
    """This handler uses server.base_path instead of always using os.getcwd()""" 
    def translate_path(self, path): 
     path = SimpleHTTPRequestHandler.translate_path(self, path) 
     relpath = os.path.relpath(path, os.getcwd()) 
     fullpath = os.path.join(self.server.base_path, relpath) 
     return fullpath 


class HTTPServer(BaseHTTPServer): 
    """The main server, you pass in base_path which is the path you want to serve requests from""" 
    def __init__(self, base_path, server_address, RequestHandlerClass=HTTPHandler): 
     self.base_path = base_path 
     BaseHTTPServer.__init__(self, server_address, RequestHandlerClass) 

तो फिर आप अपने कोड में किसी भी मनमाने ढंग से पथ सेट कर सकते:

2
बस संपूर्णता के लिए

, आपके द्वारा सेटअप वास्तविक सर्वर कक्षाएं एक मनमाना निर्देशिका से फ़ाइलों की सेवा के लिए कर सकते हैं

web_dir = os.path.join(os.path.dirname(__file__), 'web') 
httpd = HTTPServer(web_dir, ("", 8000)) 
httpd.serve_forever() 
संबंधित मुद्दे