У меня есть сценарий Python, который я хотел бы запустить из браузера, похоже, что mod_wsgi - это способ пойти, но метод слишком тяжелый и потребует изменений в скрипте для вывода. Наверное, я бы предпочел бы подход php идеально. Сценарии не принимают никаких данных и будут доступны только во внутренней сети.
Я запускаю apache на Linux с уже установленным mod_wsgi, какие здесь варианты?
Я бы пошел на микро-каркасный подход на всякий случай, если ваши требования изменились - и вы никогда не знаете, что это может быть приложение, а просто базовый дамп... Возможно, самый простой (и старомодный способ !?) использует CGI:
print 'Content-Type: text/plain\n'
перед любым другим выходом в sys.stdout
.py
добавлен в обработчик Apache CGIНо - я не вижу, так или иначе, это будет фантастическое преимущество (как минимум, в долгосрочной перспективе)
Вы можете использовать любую микроструктуру 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)
Что приятно в микрофреймах, они абстрагируют заголовки писем и т.д. (Но все равно должны предоставить вам интерфейс, если это необходимо)
print
материал в стандартныйstdout
Я просто был быстрый и простой способ отобразить вывод через браузер.