Я написал следующий код, чтобы принять HTTP POST
, а затем записать временный файл, содержащий данные POST
, а затем отправить этот временный файл на принтер, используя subprocess
и команду UNIX lp
.
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
try:
result = json.loads(body, encoding='utf-8')
# Do other stuff with result
p = subprocess.Popen(['/usr/bin/env', 'lp', '-d', printer_queue, temp.name], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.send_response(200)
self.end_headers()
response = BytesIO()
response.write(b'POST Received: ')
response.write(body)
self.wfile.write(response.getvalue())
except Exception as err:
tb = traceback.format_exc()
print(tb)
self.send_response(500) # 500 Internal Server Error
self.end_headers()
response = BytesIO()
response.write(b'ERROR: Blah')
self.wfile.write(response.getvalue())
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
и все было замечательно.Затем я прочитал, что HTTPServer
не следует использовать в Production, и все перестало быть потрясающим.
Итак, как я могу написать эквивалентный код, который можно использовать в качестве рабочего сервера?У меня есть веб-сервер Apache, но я не уверен, как добавить к нему приведенный выше код Python (желательно, не меняя его слишком сильно, поскольку его много).