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

如何用Python同时运行ngrok与本地服务两个命令行程序?

解决方法

os.system()会阻塞当前Python进程,直到执行的命令运行结束,所以第二个命令必须等第一个完成才会启动。要让两个命令同时运行,有两种常用方案:

方案1:让Shell命令后台执行

在类Unix系统(Linux/macOS)中,给第一个命令末尾加&,让它在后台运行;Windows系统则用start /B命令:

类Unix系统代码

import os
os.system('python -m http.server 8000 &')  # & 让命令后台运行
os.system('ngrok http 8000')

Windows系统代码

import os
os.system('start /B python -m http.server 8000')  # /B 表示后台运行不新开窗口
os.system('ngrok http 8000')

跨平台兼容版本

import os
import sys

if sys.platform.startswith('win'):
    os.system('start /B python -m http.server 8000')
else:
    os.system('python -m http.server 8000 &')
os.system('ngrok http 8000')

方案2:使用Python的subprocess模块(推荐)

subprocess.Popen()可以异步启动子进程,不会阻塞当前Python进程,是更Pythonic的实现方式:

import subprocess
import sys

# 启动本地HTTP服务,异步执行
server_process = subprocess.Popen(
    [sys.executable, '-m', 'http.server', '8000'],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)

# 启动ngrok,同步执行(如果需要也可以用Popen异步)
ngrok_process = subprocess.Popen(
    ['ngrok', 'http', '8000'],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)

# 若需要等待两个进程都结束,可取消以下注释
# server_process.wait()
# ngrok_process.wait()

你之前分开文件运行仍未解决,大概率是因为每个文件里还是用了os.system()这种阻塞式调用,没有让进程在后台异步执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:25:15