首页 > 编程语言 >pyinstaller 打包无窗口python http.server无法启动

pyinstaller 打包无窗口python http.server无法启动

时间:2024-05-25 15:11:35浏览次数:20  
标签:__ http format python self server message

最近在写一个简单的文件服务器用来访问静态文件,遇到在pyinstaller无窗口模式下无法启动的问题,记录一下解决方案。

  • 原因:http.server需要将记录输出到窗口,而pyinstaller打包无窗口模式没有地方输出

    class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
        ...
        
        def log_message(self, format, *args):
            """Log an arbitrary message.
    
            This is used by all other logging functions.  Override
            it if you have specific logging wishes.
    
            The first argument, FORMAT, is a format string for the
            message to be logged.  If the format string contains
            any % escapes requiring parameters, they should be
            specified as subsequent arguments (it's just like
            printf!).
    
            The client ip and current date/time are prefixed to
            every message.
    
            Unicode control characters are replaced with escaped hex
            before writing the output to stderr.
    
            """
    
            message = format % args
            sys.stderr.write("%s - - [%s] %s\n" %
                             (self.address_string(),
                              self.log_date_time_string(),
                              message.translate(self._control_char_table)))
    
    
  • 解决方案:

    import os
    import http.server
    import socketserver
    
    DIRECTORY = os.path.join(os.path.abspath(os.path.dirname(__file__)), "static", "js")
    PORT = 38121
    
    
    class SimpleHTTPRequestHandlerWithDirectory(http.server.SimpleHTTPRequestHandler):
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, directory=DIRECTORY, **kwargs)
    
        # 重写这个防止服务打包后起不来
        def log_message(self, format, *args):
            pass
    
    
    def run_server(port=PORT):
        # 创建并启动服务器
        try:
            with socketserver.TCPServer(("", port), SimpleHTTPRequestHandlerWithDirectory) as httpd:
                # print("Serving at port", port)
                httpd.serve_forever()
        except OSError as e:
            print(e)
            pass
    
    
    if __name__ == '__main__':
        run_server()
    

标签:__,http,format,python,self,server,message
From: https://www.cnblogs.com/taozhengquan/p/18212441

相关文章

  • HTTP与HTTPS的前尘往事
    一、HTTPHTTP(HypertextTransferProtocol,超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上,并指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。工作原理客户端发起请求:客户端(通常是Web浏览器)向服务器发送HTTP请求。请求包括请求的方法(如GET......
  • python多线程
    1、当程序中有耗时操作时,我们应该使用多线程来进行操作。多线程就像是多辆火车,可以在不同的轨道上同时运行。而进程就像是火车站,正在运行的一个程序的实例。python中多线程可以提供threading模块来实现。简单的多线程案例:importthreadingimporttime#定义线程执行的......
  • Python中动态调用C#的dll动态链接库中方法
    在Python中调用C#的dll库_哔哩哔哩_bilibili 环境准备: 安装pythonnetpipinstallpythonnet 在Python中调用C#动态链接库(DLL),可以使用pythonnet库,它允许直接使用.NET的程序集。以下是一个示例,展示如何使用pythonnet调用C#动态链接库中的方法。【pythonnet详解】—......
  • wxPython==4.2.1 aui.AuiToolBar 如何去掉烦人的抓手?
    aui.AuiToolBar如何去掉烦人的抓手?最近在用wxPython做一些GUI小应用,发现工具栏总有几个点(抓手),很影响美观,如下:目前官方没有提供隐藏抓手的功能,需要更改源码的auibar.py文件注释掉对应代码。如下:#注释这句,大致在auibar.py+3480(不同版本可能有差异)#self._art.DrawGrip......
  • Golang:使用go-resty/resty发送http请求get和post
    Golang:使用go-resty/resty发送http请求get和post原创 吃个大西瓜 CodingBigTree 2024-05-2508:00 北京 听全文 go-resty/resty是一个简单的HTTP和REST客户端,受到Rubyrest-client的启发文档https://github.com/go-resty/resty/安装go get github......
  • 头歌实验平台-Python-Scrapy爬虫之拉勾网招聘数据分析(第4,5关)
    首先十分感谢在博主(Radish_c-CSDN博客)的帮助下,完成了这个实验的1-3关,然后第4-5关就卡住了,然后搜了好久,这个实验4和5平台上只有博主 (Radish_c-CSDN博客)这个需要更改命令行的答案,博主的原文章在这里Python应用-Scrapy爬虫之拉勾网招聘数据分析-CSDN博客Python应用-Scrapy爬虫......
  • Python串口控制MS伺服电机(多圈角度)
    """多圈电机转动模式1"""defdecimal_to_hex_bytes(decimal_number,byte_size):#检查字节大小参数的有效性valid_sizes={"int8":1,"int16":2,"int32":4,"int64":8}ifbyte_sizenotinval......
  • Python筑基之旅-MySQL数据库(三)
    目录一、数据库操作1、创建1-1、用mysql-connector-python库1-2、用PyMySQL库1-3、用PeeWee库1-4、用SQLAlchemy库2、删除2-1、用mysql-connector-python库2-2、用PyMySQL库2-3、用PeeWee库2-4、用SQLAlchemy库二、数据表操作1、创建1-1、用mysql-connector-pyth......
  • Python筑基之旅-MySQL数据库(四)
    目录一、数据表操作1、新增记录1-1、用mysql-connector-python库1-2、用PyMySQL库1-3、用PeeWee库1-4、用SQLAlchemy库2、删除记录2-1、用mysql-connector-python库2-2、用PyMySQL库2-3、用PeeWee库2-4、用SQLAlchemy库3、修改记录3-1、用mysql-connector-python......
  • kettle从入门到精通 第六十三课 ETL之kettle kettle调用python脚本的两种方法
    kettle中不能直接调用python脚本,可以通过shell脚本和http进行调用pyton服务。一、shell脚本调用python脚本1、下面是一段简单的无参python脚本importosdefmain():#在这里编写Python脚本的主要逻辑print("Hello,thisisaPythonscriptcalledbyshell!")i......