如何为Popen指定工作目录


186

有没有一种方法可以在Python的目录中指定命令的运行目录subprocess.Popen()

例如:

Popen('c:\mytool\tool.exe', workingdir='d:\test\local')

我的Python脚本位于 C:\programs\python

是否可以C:\mytool\tool.exe在目录中运行D:\test\local

如何设置子流程的工作目录?


Answers:


269

subprocess.Popen 接受一个cwd参数来设置当前工作目录;您还需要转义反斜杠('d:\\test\\local'),或使用,r'd:\test\local'以便Python不会将反斜杠解释为转义序列。按照您编写的方式,\t零件将被翻译为tab

因此,您的新行应如下所示:

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')

要将Python脚本路径用作cwd,import os并使用以下命令定义cwd:

os.path.dirname(os.path.realpath(__file__)) 

2
如果有的话,将Shell = True添加到参数对设置cwd有什么影响?
T. Stone,

3
@T。Stone:对于独立的可执行文件,它不应进行任何更改,除非该exe依赖于Shell中的某些环境变量。但是,对于shell=False,您不能使用诸如这样的内建外壳cd:即,在两种外壳上都可以在Linux上进行尝试:subprocess.Popen("cd /tmp; pwd")
Mark Rushakoff 09年

12
至少在python 3中,即使在Windows计算机上,您也不必使用反斜杠,我只是这样做了subprocess.call(["C:/Users/Bob/Some.exe"], cwd="C:/Users/Jane/"),它也可以正常工作
mgrandi

7
工作目录是否必须是绝对路径?
DXsmiley 2015年

10
它也适用于subprocess.check_output()。谢谢 !
塞缪尔·道祖
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.