在Xcode运行iOS项目前启动Python HttpServer遇问题求助
解决Xcode Run Script启动HTTP服务器随项目终止的问题
嘿,我之前也踩过这个坑!你现在遇到的问题根源很明确:Xcode的Run Script是和项目主进程绑定的——你启动的Python服务器其实是Xcode进程的子进程,当你点击停止按钮或者项目运行结束时,Xcode会把所有关联的子进程一并杀掉,所以服务器跟着就终止了。而且因为服务器是持续运行的,Xcode会一直等待脚本执行完成,自然就会抛出超时或错误信息。
给你几个实用的解决方案:
1. 让服务器后台运行并脱离Xcode进程
直接修改Run Script里的命令,把它改成后台运行且不受Xcode进程影响的形式:
nohup python -m SimpleHTTPServer 9527 > /dev/null 2>&1 &
拆解下每个部分的作用:
nohup:让进程在父进程(Xcode)退出后继续存活> /dev/null:把服务器的标准输出扔去“黑洞”,避免生成多余的nohup.out文件2>&1:把错误输出也重定向到标准输出,一起丢去黑洞,不让Xcode捕获到这些输出而报错&:让服务器在后台运行,不阻塞Xcode的后续流程
2. 避免重复启动服务器(防止端口占用)
如果每次点Run都启动一次,很容易出现端口被占用的问题,所以可以加个检查逻辑,只有端口空闲时才启动:
PORT=9527 # 检查端口是否被监听 if ! lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null ; then nohup python -m SimpleHTTPServer $PORT > /dev/null 2>&1 & fi
3. 如果你用的是Python3,记得改命令
Python3里已经移除了SimpleHTTPServer模块,换成了http.server:
nohup python3 -m http.server 9527 > /dev/null 2>&1 &
额外:手动停止服务器的方法
如果需要关掉这个后台运行的服务器,在终端执行:
lsof -t -i:9527 | xargs kill -9
这个命令会找到占用9527端口的进程ID,然后强制杀掉它。
这样修改后,你再点Xcode的Run按钮,服务器就会在后台持续运行,不会随项目停止而终止,Xcode也不会再报错啦!
内容的提问来源于stack exchange,提问作者ZeroChow
相关产品推荐
相关产品推荐

