You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何隐式运行http.server命令同时输出运行提示

问题根源

你当前使用的os.system是同步阻塞接口,必须等调用的命令执行完成后才会继续向下执行后续代码,所以print语句会一直卡住直到http服务退出,同时默认会弹出控制台窗口,不符合隐式运行的要求。

实现方案

使用Python标准库的subprocess.Popen异步非阻塞接口启动后台进程,同时配置参数隐藏窗口、丢弃多余输出即可实现需求。

完整可运行代码

import subprocess

def run():
    # 修正后的http.server启动命令,指定服务根目录为payload所在文件夹
    cmd = ["python", "-m", "http.server", "--directory", "C:/Showtape/payload", "80"]
    
    # Windows专属配置:隐藏进程的控制台窗口
    startup_info = subprocess.STARTUPINFO()
    startup_info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    
    # 异步启动后台进程,不会阻塞主进程
    subprocess.Popen(
        cmd,
        startupinfo=startup_info,
        creationflags=subprocess.CREATE_NO_WINDOW,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL
    )
    # 启动后立即执行后续打印和其他业务逻辑
    print("Server running...")
    print("Serving payload..")
    
    # 此处可继续添加其他需要同步执行的操作

if __name__ == "__main__":
    run()

注意事项

  • 原命令参数错误:python -m http.server如果要指定服务目录,必须添加--directory参数,直接写可执行文件路径会被识别为无效参数,上面的代码已经修正,启动后访问http://127.0.0.1/payload.exe即可下载对应文件。
  • 如果要在Linux/macOS环境运行,删除startupinfo和creationflags两个参数即可,其余逻辑通用。
  • 如果需要主进程退出后http服务仍在后台运行,可在Popen参数中添加close_fds=True。

内容的提问来源于stack exchange,提问作者yrifl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:27:04