服务器 http 显示来自 .txt 的变量 python

Server http displays a variable from .txt with python

我想向显示 .txt 文件中的数据的网络服务器发出 HTTP 请求 (PYTHON)。

我有这个 data1.txt 文件,其中包含:

bonjour

这是我的代码 webserver.py:

#!/usr/bin/python
from http.server import BaseHTTPRequestHandler,HTTPServer
    
class myHandler(BaseHTTPRequestHandler):
    def do_GET(self):

        ###############################

        File = open('data1.txt',"r")
        if(File == None):
            print("File Not Found..")
        else:
            while(True):
                # extracting data from records 
                record = File.readline()
                if (record == ''): break
        File.close()

        ###############################


        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
        self.wfile.write(
            b"Hello from <b>Raspberry Pi</b> running <b><i>Python</i></b>")
        self.wfile.write(
            b"<a href='http://helloraspberrypi.blogspot.com'>Hello Raspberry Pi</>")
        self.wfile.write(
            b"$record" )
        return

try:
    server = HTTPServer(('localhost', 8080), myHandler)
    print ('HTTPServer started')
    server.serve_forever()
    
except KeyboardInterrupt:
    print ('server.socket.close()')
    server.socket.close()

我想显示 bonjour 感谢以下行 self.wfile.write(b"$record" ) 来自对应于 bonjour 的变量 recordrecord = File.readline() = bonjour

我的问题是我不知道如何调用变量,我尝试使用 $record 但它不起作用。

首先请注意 documentation 建议不要使用此方法:

Warning: http.server is not recommended for production. It only implements basic security checks.

像 Flask 这样的东西同样简单,而且更适合生产使用。无论如何,继续使用 http.server:

  • 您实际上并不是在提供文本内容;您正在提供 HTML 内容,因此请将您的 .txt 文件重命名为 .html
  • 考虑使用不同的处理程序,即 SimpleHTTPRequestHandler,直接从文件系统提供内容
  • 将您的 Hello(等)移动到 .html

您还误解了 Python 在找不到文件时文件操作的工作方式。这是行不通的:

        if(File == None):
            print("File Not Found..")

因为失败时,open 不会 return None;它会引发异常。

对于您的 record 参考,修复应该只是

self.wfile.write(record.encode())

您还需要删除您的读取循环;目前这个:

if (record == ''): break

保证您显示的记录将是一个空字符串。相反,只做一个 file.read() 并展示作品,而不是逐行阅读。

解决方法是拆分.txt文件(变量data),然后对其进行编码:

#!/usr/bin/python
from http.server import BaseHTTPRequestHandler,HTTPServer

class myHandler(BaseHTTPRequestHandler):
    def do_GET(self):

         ###############################

         File = open('data1.txt',"r")
         if(File == None):
             print("File Not Found..")
         else:
             while(True):
                 # extracting data from records 
                 record = File.readline()
                 print(record.encode())
                 if (record == ''): break
                 data = record.split()
                 print("data:",data[0].encode())

         File.close()

         ###############################


         self.send_response(200)
         self.send_header('Content-type','text/html')
         self.end_headers()
         self.wfile.write(
        "<h1>".encode() + data[0].encode() + "</h1>".encode())
         return

try:
    server = HTTPServer(('localhost', 8080), myHandler)
    print ('HTTPServer started')
    server.serve_forever()

except KeyboardInterrupt:
    print ('server.socket.close()')
    server.socket.close()

感谢您的帮助!