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

Python: Changing terminal current directory and calling script

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

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

cd DICOM/  
nii_sdcme N

其中 N 是某个文件夹编号。例如:92

cd DICOM/  
nii_sdcme 92

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

非常感谢!

最快的方法是使用 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/Whosebug
Current dir: /tmp

现在,您提到要在脚本中调用特定脚本 (nii-sdcme)。你可能会使用 subprocess.Popen to do that. With the tools provided by the subprocess 模块,你可以指定一个 cwd 参数,这样脚本(可执行的,而不是)称为 "sees" 那个 cwd 路径作为其 运行 目录。请注意,这会设置 cwd 中指示的目录,之后 可执行文件被调用...我的意思是 Popen 需要找到可执行文件的路径 设置可执行文件的 运行 目录之前。假设您在 /home/ 中并且 nii-sdcme 脚本位于 /tmp/.

这个:

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

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

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

会成功的。

来自 subrprocess.Popen 文档:

If cwd is not None, the child’s current directory will be changed to cwd before it is executed. Note that this directory is not considered when searching the executable, so you can’t specify the program’s path relative to cwd.

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

how about if i change os.chdir(desired/path) and then cann subprocess.call('nii_sdcme %s' %a)

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

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