Windows 11与 Python:如何使用npx http-server命令启动一个分离的后台进程

前端开发 2026-07-11

我在处理几个Playwright套件,并且需要持续检查它们的HTML报告,我可以在一个端口加载它们,作为一个分离进程,在PowerShell中使用以下命令:

$command = "npx http-server {0} -p {1}" -f $folder, $ports[$i]
Start-Process -FilePath "cmd.exe" -ArgumentList "/c", $command -WindowStyle Hidden

因此即使我关闭终端,服务器仍然在运行。

我也尝试用一个Python脚本复现同样的效果,这样所有报告就会自动加载到不同的端口上。

但无论我怎么试,似乎都不起作用:要么脚本结束时进程就会结束,要么桌面上会出现一个漂浮在我的桌面上的终端窗口,服务器还在运行,虽然可行但很烦人,我想把它作为后台进程。

据我所知,应该有类似的东西可以实现它,即在我的脚本结束后就立即结束这些进程。

command = f"npx http-server \"{report_dir_abs}\" -p {port}"
subprocess.Popen(
        command,
        shell=True,
        start_new_session=True,
        creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP,
        close_fds=True,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
        stdin=subprocess.DEVNULL
    )

但我尝试过改变 shell、删除 start_new_session、不使用 creationflags,还在 stdoutstderr 放了一个文件来检查是否有问题(也许是错误),但文件是空的。

有人知道怎么才能让它工作吗?以后台/隐藏的方式启动进程,与父进程完全分离,对用户不可见,没有漂浮的窗口?

解决方案

最终,我差不多把事情搞定了。

我保留当前的解决方案,但欢迎继续补充更多方案或改进 :)

server_cmd = f"http-server {report_dir_abs} -p {port}"
command = f'start "" /B {server_cmd}'
subprocess.Popen(
    command,
    shell=true,
    start_new_session=True,
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL,
    stdin=subprocess.DEVNULL
)

有了这段代码,进程是由CMD以分离进程的方式启动的,即使我的Python脚本死亡,进程仍然在运行。

我还将 npx http-server 改为 http-server,因为每次运行这段代码都会生成三个独立的进程:一个CMD、一个用于npx的 node和一个用于http-server的 node。全局安装该软件包可以把它们合并到一个进程中。

我也检查了CMD进程可以被终止而不影响node的 'http-server',但我没找到通过修改这段代码来单独终止它的方法。

添加 && exit& exit 都不起作用,所以我选择稍后再用另一条命令自行终止它。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章