Python:更改终端当前目录和调用脚本

时间:2015-02-17 19:04:37

标签: python bash terminal

一旦我检查了文件夹中的特定文件,我想从python中调用标题为nii-sdcme的bash脚本。但在终端中调用此脚本之前,我想cd到特定目录。这可以在python中完成吗?

因此,在终端中运行此脚本的步骤如下所示:

cd DICOM/  
nii_sdcme N

其中N是某个folderNumber。例如:92

cd DICOM/  
nii_sdcme 92

有人可以指导我如何在python脚本中实现它吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

最快的方法是使用os.chdir

import os

if __name__ == "__main__":
    print "Current dir: %s" % os.getcwd()
    os.chdir('/tmp/')
    print "Current dir: %s" % os.getcwd()

调用时输出:

Current dir: /home/borrajax/Documents/Tests/StackOverflow
Current dir: /tmp

现在,您提到要在脚本中调用特定脚本(nii-sdcme)。您可能会使用subprocess.Popen来执行此操作。使用subprocess模块提供的工具,您可以指定cwd参数,以便名为"的脚本(可执行文件)看到" cwd 1}} path作为其运行目录。请注意,这会在调用可执行文件后设置cwd 中指示的目录...我的意思是Popen需要找到可执行文件' s在设置可执行文件的运行目录之前的路径。让我们说你在/home/nii-sdcme脚本位于/tmp/

这:

subprocess.Popen(['nii-sdcme'], cwd='/tmp/')

将失败,因为可执行文件不在$PATH环境变量中定义的目录中。另一方面,这个:

subprocess.Popen(['/tmp/nii-sdcme'], cwd='/tmp/')

会成功。

来自subrprocess.Popen文档:

  

如果cwd不是None,则子项的当前目录将更改为   cwd在执行之前。请注意,不考虑此目录   在搜索可执行文件时,您无法指定程序   相对于cwd的路径。

编辑(根据OP对此问题的评论)

  

如果我改变os.chdir(期望/路径)然后然后插入怎么样   subprocess.call(' nii_sdcme%s'%a)

使nii_sdcme使用desired/path作为运行目录。 os.chdir更改当前进程的路径(您当前的解释器)。如果随后在未指定nii_sdcme参数的情况下调用cwd可执行文件,则生成的子进程将使用父进程的当前目录作为当前目录。

(!)小心:即使您通过os.chdir更改了可执行文件的当前目录,仍然需要提供nii_sdcme可执行文件的完整路径(除非nii_sdcme$PATH环境变量中指定的其中一个目录)