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

pep*_*ero 14 python subprocess working-directory

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

work/project/test/a.py
Run Code Online (Sandbox Code Playgroud)

在里面a.py,我用来subprocess.POPEN从另一个目录启动进程,

work/to_launch/file1.pl, file2.py, file3.py, ...
Run Code Online (Sandbox Code Playgroud)

Python代码:

subprocess.POPEN("usr/bin/perl ../to_launch/file1.pl") 
Run Code Online (Sandbox Code Playgroud)

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

[user@machine project]python test/a.py,
Run Code Online (Sandbox Code Playgroud)

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

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

eum*_*iro 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
Run Code Online (Sandbox Code Playgroud)