Heim  >  Artikel  >  Backend-Entwicklung  >  Verwandeln Sie Ihre alte Python-Webanwendung in eine WSGI-fähige und Apache-fähige Anwendung

Verwandeln Sie Ihre alte Python-Webanwendung in eine WSGI-fähige und Apache-fähige Anwendung

PHPz
PHPznach vorne
2024-02-09 15:33:03543Durchsuche

将旧的 Python Web 应用程序转变为 WSGI 就绪和 Apache

Frageninhalt

Ich habe eine alte Webanwendung, die in Python geschrieben ist. Es handelt sich im Grunde genommen um eine Reihe von .py-Dateien. Zum Beispiel:

display.py:

import cgi
import re
import string
import operator
from urllib.parse import urlparse
from errors import herigean
from routines import *

error = false

query = cgifieldstoragetodict(cgi.fieldstorage())
opening_index = 0 # flag to indicate whether we're opening the index page
if ('what' not in query):
        query['what'] = 'index'
if 'fs' not in query:
        query['fs'] = str(default_font_size)

# open page to display
try:
        fil = open('html/'+query['what']+'.fmt')
        textlines = fil.read()
        queryreg = re.compile('query:fs:query')
      textlines = queryreg.sub(query['fs'],textlines)
        fil.close()
except ioerror:
        error = true

if query['what'] == 'about':
        try:
                fil = open('legal/lgpl-3.0.txt')
                lgpl = fil.read()
                fil.close()
                fil = open('legal/gpl.txt')
                gpl = fil.read()
                fil.close()
                fil = open('html/availability.fmt')
                availability = fil.read()
                fil.close()
        except ioerror:
                error = true
if query['what'] == 'corpus':
        try:
                fil = open('html/availability.fmt')
[...]
if error:
        herigean()
else:
        print(frontmatter)

Warten

Wie kann ich es hinter einem Apache-Proxy mit mod_wsgi ausführen, das in einer virtuellen Umgebung installiert ist? Jetzt habe ich eine virtuelle Python 3.11-Umgebung mit mod_wsgi-express 5 installiert. Ich kann test.py mit dem folgenden Befehl erfolgreich ausführen:

mod_wsgi-express启动服务器测试.py

def application(environ, start_response):
    start_response('200 ok', [('content-type', 'text/html')])
    return [b'hello, world!']

Wie führe ich meine alte Python-Anwendung aus? Muss ich einfach jede .py-Datei in def application(environ, start_response): einschließen? Jede Hilfe wäre sehr dankbar.

Hinzufügen :

Die App ist www.index.html 。里面有一个 877b1115d8e4694cad45ad73ff3130ed. So wird es derzeit serviert.

Zusätzliches ii

Ich kann die Ausgabe nicht erhalten: bei Verwendung von

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    [...]
    return print(frontmatter)

Ich erhalte den gesamten HTML-Code in den Protokollen, dann typeerror: 'nonetype' object is not iterable und einen internen Serverfehler im Browser. typeerror: 'nonetype' object is not iterable 和浏览器上的内部服务器错误。


正确答案


我应该使用 yield bytes(html) 而不是 print

Richtige Antwort

🎜🎜Ich sollte yield bytes(html) anstelle von print verwenden. 🎜

Das obige ist der detaillierte Inhalt vonVerwandeln Sie Ihre alte Python-Webanwendung in eine WSGI-fähige und Apache-fähige Anwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen