Как запустить CGI «hello world» с помощью python http.server

Я использую Windows 7, python3.4.3. Я хотел бы запустить этот простой файл helloworld.py в моем браузере:

print('Content-Type: text/html') print( '<html>') print( '<head></head>') print( '<body>') print( '<h2>Hello World</h2>') print( '</body></html>') 

Что я делаю:

1) Перейдите в командную строку «C: \ Python» (где установлен мой питон)

2) запустить: python -m http.server

3) Получил мой firefox и набрал « http: // localhost: 8000 / hello.py »

Однако вместо «Hello World» браузер просто печатает содержимое файла hello.py.

Как я могу это исправить?

Благодаря!

2 Solutions collect form web for “Как запустить CGI «hello world» с помощью python http.server”

Из документов http.server :

CGIHTTPRequestHandler можно включить в командной строке, передав параметр – --cgi :

 $ python3 -m http.server --bind localhost --cgi 8000 

Поместите свой скрипт в cgi_directories :

По умолчанию это ['/cgi-bin', '/htbin'] и описывает каталоги для обработки как содержащие CGI-скрипты.

Открыть в браузере:

 $ python -mwebbrowser http://localhost:8000/cgi-bin/hello.py 

где hello.py :

 #!/usr/bin/env python3 print("Content-Type: text/html\n") print("<!doctype html><title>Hello</title><h2>hello world</h2>") 

Я должен был сделать его исполняемым на POSIX: chmod +x cgi-bin/hello.py .

Я сделал это некоторое время назад для Python2.7

 from BaseHTTPServer import BaseHTTPRequestHandler class GetHandler(BaseHTTPRequestHandler): def do_HEAD(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() def do_GET(self): x = self.wfile.write self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() # <--- HTML starts here ---> x("<html>") # <--- HEAD starts here ---> x("<head>") x("<title>Title goes here!</title>") x("</head>") # <--- HEAD ends here ---> # <--- BODY starts here ---> x("<body>") x("<p>This is a test.</p>") x("</body>") # <--- BODY ends here ---> x("</html>") # <--- HTML ends here ---> if __name__ == '__main__': from BaseHTTPServer import HTTPServer server = HTTPServer(('localhost', 777), GetHandler) print 'Starting server, use <Ctrl + F2> to stop' server.serve_forever() 

Поэтому в Python 3 вам просто нужно изменить импорт

 from http.server import BaseHTTPRequestHandler class GetHandler(BaseHTTPRequestHandler): def do_HEAD(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() def do_GET(self): x = self.wfile.write self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() # <--- HTML starts here ---> x("<html>") # <--- HEAD starts here ---> x("<head>") x("<title>Title goes here!</title>") x("</head>") # <--- HEAD ends here ---> # <--- BODY starts here ---> x("<body>") x("<p>This is a test.</p>") x("</body>") # <--- BODY ends here ---> x("</html>") # <--- HTML ends here ---> if __name__ == '__main__': from http.server import HTTPServer server = HTTPServer(('localhost', 777), GetHandler) print('Starting server, use <Ctrl + F2> to stop') server.serve_forever() 

Я не знаю прямо сейчас, если функция print в python 3

 print("") 

или

 print "" 

но я думаю, что это было с ()

Изменить: это print ()

Python - лучший язык программирования в мире.