Python:具有不同工作目录的子进程

时间:2010-09-21 16:38:28

标签: python subprocess working-directory

我有一个位于此目录下的python脚本:

work/project/test/a.py

a.py内,我使用subprocess.POPEN从另一个目录

启动进程
work/to_launch/file1.pl, file2.py, file3.py, ...

Python代码:

subprocess.POPEN("usr/bin/perl ../to_launch/file1.pl") 

在work / project /下,我输入以下内容

[user@machine project]python test/a.py,

错误“file2.py,'没有这样的文件或目录'”

如何添加work/to_launch/,以便找到这些相关文件file2.py

3 个答案:

答案 0 :(得分:16)

您的代码不起作用,因为相对路径相对于您当前的位置(高于test/a.py的一个级别)。

sys.path[0]中,您拥有当前正在运行的脚本的路径。

os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch)relPathToLaunch = '../to_launch/file1.pl'一起使用,以获取file1.pl的绝对路径并使用perl运行{。}}。

编辑:如果您想从其目录启动file1.pl然后返回,请记住您当前的工作目录,然后切换回来:

origWD = os.getcwd() # remember our original working directory

os.chdir(os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch))
subprocess.POPEN("usr/bin/perl ./file1.pl") 
[...]

os.chdir(origWD) # get back to our original working directory

答案 1 :(得分:1)

使用相对于脚本的路径,而不是当前工作目录

os.path.join(os.path.dirname(__file__), '../../to_launch/file1.pl)

另请参阅我对Python: get path to file in sister directory?

的回答

答案 2 :(得分:0)

您可以使用此代码设置当前目录:

import os
os.chdir("/path/to/your/files")