如何在Python os.system中执行多命令?Django服务器启动异常排查
问题原因及解决办法
为什么服务器没启动
在Windows环境下,直接用os.system执行activate虚拟环境脚本时,这个批处理脚本会终止当前的cmd shell会话,导致后面的python manage.py runserver命令根本没机会执行。你看到的exit code 0只是activate脚本执行成功的返回码,和启动服务器的命令无关。
而你去掉激活命令后报模块找不到,说明全局Python环境没有安装Django,必须依赖虚拟环境里的解释器才能正常运行。
解决办法
有两种靠谱的处理方式:
方式一:用call执行激活脚本,保留shell会话
给activate命令加上call前缀,这样批处理脚本执行完后不会退出shell,后续的启动命令会在激活后的虚拟环境中运行:
import os os.system(''' call .\match_pyinstaller\match_project\venv\Scripts\activate python .\match_pyinstaller\match_project\manage.py runserver ''')
方式二:直接调用虚拟环境内的Python解释器(更推荐)
跳过激活虚拟环境的步骤,直接指定虚拟环境中python.exe的完整路径来运行manage.py,避免shell会话的问题,逻辑更简洁:
import os # 拼接虚拟环境Python和manage.py的路径 venv_python = os.path.join('match_pyinstaller', 'match_project', 'venv', 'Scripts', 'python.exe') manage_file = os.path.join('match_pyinstaller', 'match_project', 'manage.py') os.system(f'{venv_python} {manage_file} runserver')
内容的提问来源于stack exchange,提问作者Abdelhamed Abdin
相关产品推荐
相关产品推荐

