处理子流程时,更改工作目录会带来挑战。尝试在子目录或超级目录中导航时会出现此问题。然而,关键在于理解调用程序和执行命令之间的区别。
在您的代码中,您试图调用名为“cd”的程序,这是一种无效的方法。相反,您应该调用名为“cd”的命令。
错误说明:
“subprocess.call(['cd ..'])”语句触发 OSError 因为“cd”是 shell 内部的。因此,您需要在 shell 中执行它,如以下修改所示:
subprocess.call('cd ..', shell=True)
为什么“shell=True”毫无意义:
尽管它表面上的修复,使用“shell=True”实际上是毫无意义的。这是因为没有进程可以修改另一个进程的工作目录,这意味着子 shell 将更改其目录并立即退出。
替代解决方案:
成功更改工作目录在执行子进程之前,您可以使用替代方法:
使用 "os.chdir()":
wd = os.getcwd() os.chdir("/destination/directory") subprocess.Popen("ls") os.chdir(wd)
在“子进程”中使用“cwd”参数:
subprocess.Popen("ls", cwd="/destination/directory")
这些替代方法允许您在执行子进程之前指定工作目录,确保命令在所需的目录中执行。
以上是如何在Python中更改子进程的工作目录?的详细内容。更多信息请关注PHP中文网其他相关文章!