为什么os.system(“cd mydir”)不能工作,而我们必须在python中使用os.chdir(“mydir”)呢?

为什么os.system(“cd mydir”)不能工作,而我们必须在python中使用os.chdir(“mydir”)呢?,python,sys,Python,Sys,我试着在cd之后做一个“pwd”或cwd,当我们使用os.system(“cd”)时,它似乎不起作用。子进程的创建方式是否有问题。这一切都是在Linux下进行的 os.system('cd foo')运行/bin/sh-c“cd foo” 这个确实有效:它启动一个新的shell,将该shell的当前工作目录更改为foo,然后在到达调用它的脚本末尾时允许该shell退出 但是,如果要更改当前进程的目录,而不是system()创建的/bin/sh副本,则需要在同一进程中运行该调用;因此,os.chd

我试着在cd之后做一个“pwd”或cwd,当我们使用os.system(“cd”)时,它似乎不起作用。子进程的创建方式是否有问题。这一切都是在Linux下进行的

os.system('cd foo')
运行
/bin/sh-c“cd foo”

这个确实有效:它启动一个新的shell,将该shell的当前工作目录更改为
foo
,然后在到达调用它的脚本末尾时允许该shell退出


但是,如果要更改当前进程的目录,而不是
system()
创建的
/bin/sh
副本,则需要在同一进程中运行该调用;因此,
os.chdir()。如果您使用
系统(“cd..
,您正在创建一个新进程,然后该进程会更改其当前工作目录并终止。如果子进程更改其当前工作目录时神奇地更改了其父进程的当前工作目录,这将非常令人惊讶。发生这种情况的系统将很难使用。

os.system
(这只是POSIX
system
调用的一个薄包装)在作为当前进程的子进程启动的shell中运行命令。在该shell中运行
cd
只会更改该进程的当前目录,而不会更改父进程。

@MalikBrahimi,嗯?“系统资源管理器”?我无法与Windows对话,但在POSIX系统上,这完全是错误的。的公认答案也完全适用于此问题。严格来说,子shell不是子shell——子shell是从父shell派生出来的shell,没有中间的
exec
*-家族系统调用。(我在自己答案的第一次修订中犯了同样的错误,但后来已经改正了)。@CharlesDuffy:Will fix。谢谢查尔斯!