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

如何通过Python的OS模块实现命令提示符多命令持续会话?

Python os模块执行多行命令的会话不持久问题

你遇到的问题本质是:os.system()和os.popen()每次调用都会启动独立的子进程,每个子进程有自己的环境变量和工作目录,互相不共享。所以你先调用cd切换目录,只在那个临时子进程里生效,后续的pip freeze是在新的子进程里执行,自然还是原来的目录。

下面是几种可行的解决办法:

1. 单进程内串联多个命令

用&&把多个命令连在一起,让它们在同一个子进程里执行:

from os import popen, getlogin

# 把cd和pip freeze放在同一个命令里执行
output = popen(f'cd C:/Users/{getlogin()} && pip freeze').read()
print(output)

2. 直接指定子进程的工作目录(更推荐)

不用cd命令,直接给子进程指定工作目录,popen支持cwd参数:

from os import popen, getlogin

user_dir = f'C:/Users/{getlogin()}'
# 直接指定执行pip freeze的目录
output = popen('pip freeze', cwd=user_dir).read()
print(output)

如果追求更安全、功能更丰富的方式,建议用subprocess模块(官方更推荐替代os模块的旧方法):

import subprocess
from os import getlogin

user_dir = f'C:/Users/{getlogin()}'
# subprocess可以直接指定工作目录,还能更灵活处理输出
output = subprocess.check_output(['pip', 'freeze'], cwd=user_dir, text=True)
print(output)

3. 用批处理文件执行复杂多命令

如果有一堆复杂的多行命令,可以把它们写到.bat文件里,再用Python调用:

rem 保存为commands.bat
cd C:/Users/%USERNAME%
pip freeze

然后Python中调用:

from os import system

system('commands.bat')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:10:18