Веб-сервер для обслуживания скрипта Python

1

У меня есть сценарий Python, который я хотел бы запустить из браузера, похоже, что mod_wsgi - это способ пойти, но метод слишком тяжелый и потребует изменений в скрипте для вывода. Наверное, я бы предпочел бы подход php идеально. Сценарии не принимают никаких данных и будут доступны только во внутренней сети.

Я запускаю apache на Linux с уже установленным mod_wsgi, какие здесь варианты?

  • 0
    Какой выходной; это то, что вы можете использовать шаблон для создания структуры HTML и заполнения элементов?
  • 0
    Я должен был быть более понятным, это просто простой текст, сценарий просто print материал в стандартный stdout Я просто был быстрый и простой способ отобразить вывод через браузер.
Теги:
mod-wsgi

2 ответа

3
Лучший ответ

Я бы пошел на микро-каркасный подход на всякий случай, если ваши требования изменились - и вы никогда не знаете, что это может быть приложение, а просто базовый дамп... Возможно, самый простой (и старомодный способ !?) использует CGI:

  • Дублируйте свой скрипт и включите print 'Content-Type: text/plain\n' перед любым другим выходом в sys.stdout
  • Поместите этот скрипт где-нибудь apache2 может получить к нему доступ (например, ваш cgi-bin)
  • Убедитесь, что скрипт выполним
  • Убедитесь, что .py добавлен в обработчик Apache CGI

Но - я не вижу, так или иначе, это будет фантастическое преимущество (как минимум, в долгосрочной перспективе)

  • 0
    Это действительно должна быть краткосрочная свалка, так что это идеально.
  • 0
    @sudo_O Я должен отметить, что это не проверено, хотя ... но в теории должно работать (или по крайней мере достаточно для вас, чтобы найти рабочие конфиги / примеры)
Показать ещё 4 комментария
3

Вы можете использовать любую микроструктуру python для быстрого запуска вашего скрипта с сервера. Большинство из них включают в себя свои легкие серверы.

Из документации на домашнюю страницу Cherrypy

import cherrypy
class HelloWorld(object):
    def index(self):
        # run your script here
        return "Hello World!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())

В стандартном формате python предоставляет инструменты, необходимые для выполнения того, что вы хотите в своей стандартной библиотеке, используя HttpServer

Базовый сервер с использованием BaseHttpServer:

import time
import BaseHTTPServer


HOST_NAME = 'example.net' # !!!REMEMBER TO CHANGE THIS!!!
PORT_NUMBER = 80 # Maybe set this to 9000.


class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_HEAD(s):
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
    def do_GET(s):
        """Respond to a GET request."""
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
        s.wfile.write("<html><head><title>Title goes here.</title></head>")
        s.wfile.write("<body><p>This is a test.</p>")
        # If someone went to "http://something.somewhere.net/foo/bar/",
        # then s.path equals "/foo/bar/".
        s.wfile.write("<p>You accessed path: %s</p>" % s.path)
        s.wfile.write("</body></html>")

if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
    print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

Что приятно в микрофреймах, они абстрагируют заголовки писем и т.д. (Но все равно должны предоставить вам интерфейс, если это необходимо)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню