Why does not os.system(“cd mydir”) work and we have to use os.chdir(“mydir”) instead in python?
我试过做cd之后的" pwd"或cwd,当我们使用os.system(" cd")时它似乎不起作用。 子进程的创建方式是否正在发生变化。 这一切都在Linux下。
-
@MalikBrahimi,是吗?"系统资源管理器"? 我无法与Windows对话,但是在POSIX系统上,这是完全不正确的。
-
python子进程更改目录的公认答案也完全适用于此问题。
os.system('cd foo')运行/bin/sh -c"cd foo"
确实有效:它启动一个新的Shell,将该Shell的当前工作目录更改为foo,然后允许该Shell在到达其调用脚本的末尾时退出。
但是,如果要更改当前进程的目录,而不是system()创建的/bin/sh副本,则需要在同一进程中运行该调用。因此,os.chdir()。
os.system(这只是POSIX system调用的一个薄包装)在作为当前进程的子级启动的shell中运行命令。在该shell中运行cd只会更改该进程的当前目录,而不会更改父目录。
-
并不是严格意义上的子外壳程序-子外壳程序是从父外壳程序派生的外壳程序,而没有介入exec *-family syscall。 (我在自己的答案的第一个修订版中犯了同样的错误,但此后已予以纠正)。
-
@CharlesDuffy:会解决。 谢谢查尔斯!
system调用创建一个新进程。如果执行system("cd ..,则将创建一个新进程,然后更改其自己的当前工作目录并终止。如果子进程更改其当前工作目录会神奇地更改其父级的当前工作目录,那将非常令人惊讶。发生这种情况的系统将很难使用。