Python:是否可以在不更改实际当前目录的情况下更改Windows命令行shell的当前目录?

5 投票
3 回答
3470 浏览
提问于 2025-04-16 11:07

我正在使用 os.system() 来执行 Windows 命令行的操作。我想要改变 Windows 命令提示符的当前目录。这里有一种方法可以做到:

os.chdir('newPath')

但是,使用 chdir() 会改变实际的 Python 当前工作目录。我不想改变 Python 的工作目录,因为我希望脚本的其他部分在原来的工作目录下运行。我想改变的只是 Windows 命令提示符的当前工作目录。换句话说,我希望 os.system() 的命令在一个当前工作目录(Windows 命令提示符的当前工作目录)下运行,而其他的部分则在另一个当前工作目录(实际的 Python 当前工作目录)下运行。

这里有另一种尝试,只改变Windows 命令提示符的当前目录:

os.system('cd newPath')

然而,这显然不行,因为在执行 cd newPath 命令后,Windows 命令提示符的当前目录会被重置(因为我在下次调用 os.system() 时不会使用同一个 Windows 命令窗口)。

有没有办法让 Windows 命令提示符有一个独立的当前工作目录?(与实际的当前工作目录分开)。

3 个回答

1

如果这个程序只需要在Windows系统上运行,有一种方法可以这样做:

os.system('start /d newPath cmd')
1

当你使用 os.system 时,其实并不是在重复使用同一个命令行窗口,而是每次都新开一个。这就意味着,你在一个命令行窗口里做的改动,不能在下一个窗口里看到。

不过,你可以写一个小工具,让它在执行命令之前,先自动切换到你想要的目录。

7

subprocess模块是用来替代os.system的。

这个模块提供了很多功能,其中之一就是subprocess.Popen(),它可以接收一个cwd参数,用来指定新进程的工作目录(这正好适合你的情况)。

你可以查看这个链接了解更多信息:http://docs.python.org/library/subprocess.html

下面是一个用subprocess替代os.system的示例:

p = subprocess.Popen("yourcmd" + " yourarg", shell=True, cwd="c:/your/path")
sts = os.waitpid(p.pid, 0)[1]

撰写回答