2009-11-06 545 views
136

有没有办法在Python的subprocess.Popen()中指定命令的运行目录?指定popen的工作目录

例如:

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

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

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

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

+1

牢记子.call仅仅是一个子过程的简单包装.Popen,这个包装也处理Popen的所有参数,至少据我记得:)在简单的情况下,更好地坚持subprocess.call – shabunc 2013-10-31 13:49:08

回答

192

subprocess.Popentakes a cwd argument设置当前工作目录;您还需要跳过反斜杠('d:\\test\\local'),或使用r'd:\test\local',以便反斜杠不会被Python解释为转义序列。你写的方式,\t部分将被翻译成标签

所以,你的新行应该是这样的:

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

什么效果ct,如果有的话,会添加Shell = True的参数也设置cwd? – 2009-11-06 03:17:19

+2

@T。 Stone:对于一个独立的可执行文件,它不应该改变任何东西,除非这个exe依赖于shell中的一些环境变量,也许。但是,使用'shell = False',你不能使用'cd'这样的shell内建命令:也就是说,在Linux上用shell来试试这个:subprocess.Popen(“cd/tmp; pwd”)' – 2009-11-06 03:22:05

+1

谢谢很多!它就像一个魅力! – icn 2009-11-06 05:08:06