一旦我检查了文件夹中的特定文件,我想从python中调用标题为nii-sdcme
的bash脚本。但在终端中调用此脚本之前,我想cd到特定目录。这可以在python中完成吗?
因此,在终端中运行此脚本的步骤如下所示:
cd DICOM/
nii_sdcme N
其中N是某个folderNumber。例如:92
cd DICOM/
nii_sdcme 92
有人可以指导我如何在python脚本中实现它吗?
非常感谢!
答案 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
环境变量中指定的其中一个目录)