首页 > 解决方案 > 如何阻止 subprocess.Popen('python path/file.py') 更改文件的工作目录?

问题描述

我在不同的文件夹中有 python 文件,我正在使用 subprocess.Popen('python path/file.py') 循环执行所有这些文件,尽管是一个外部 python 文件。我的问题是:所有这些文件的工作目录正在更改为(运行器)外部文件的工作目录。我想为每个执行的文件保留旧的工作目录,有什么简单的方法可以做到吗? 请注意,这是我的外部文件的子进程代码: subprocess.Popen('python path/file.py',creationflags=subprocess.CREATE_NEW_CONSOLE)

标签: pythonsubprocess

解决方案


工作目录没有改变,它保持不变。您的父进程有一个工作目录(可能与脚本所在的目录相同也可能不同),子进程默认继承它。这就是工作目录的工作方式(它们与脚本所在的位置无关)。

如果您希望工作目录与您正在启动的脚本的路径相匹配,请将该路径作为cwd参数传递给Popen,例如:

subprocess.Popen(['python', 'path/file.py'], cwd=os.path.abspath('path'), creationflags=subprocess.CREATE_NEW_CONSOLE)

os.path.abspath可能没有必要(我没有费心检查是否subprocess接受工作目录的相对目录),但这并不是一个糟糕的主意。


推荐阅读