Python:更改终端当前目录并调用脚本
检查文件夹中是否存在特定文件后,我想从python调用名为Python:更改终端当前目录并调用脚本,python,bash,terminal,Python,Bash,Terminal,检查文件夹中是否存在特定文件后,我想从python调用名为niisdcme的bash脚本。但在终端中调用此脚本之前,我想先将cd刻录到特定的目录。这可以用python实现吗 因此,在终端中运行此脚本的步骤如下所示: cd DICOM/ nii_sdcme N 其中N是某个folderNumber。例:92 cd DICOM/ nii_sdcme 92 有人能告诉我如何在python脚本中实现这一点吗 非常感谢 最快的方法是使用: 调用时哪些输出: Current dir: /home
niisdcme
的bash脚本。但在终端中调用此脚本之前,我想先将cd刻录到特定的目录。这可以用python实现吗
因此,在终端中运行此脚本的步骤如下所示:
cd DICOM/
nii_sdcme N
其中N是某个folderNumber。例:92
cd DICOM/
nii_sdcme 92
有人能告诉我如何在python脚本中实现这一点吗
非常感谢 最快的方法是使用: 调用时哪些输出:
Current dir: /home/borrajax/Documents/Tests/StackOverflow
Current dir: /tmp
现在,您提到要在脚本中调用特定脚本(niisdcme
)。你可能会用它来做这件事。使用模块提供的工具,您可以指定cwd
参数,以便名为“see”的脚本(可执行文件)将cwd
路径作为其运行目录。请注意,这将在调用可执行文件后设置cwd
中指示的目录。。。我的意思是,在设置可执行文件的运行目录之前,Popen
需要找到可执行文件的路径。假设您在/home/
中,nii sdcme
脚本位于/tmp/
中
这:
subprocess.Popen(['nii-sdcme'], cwd='/tmp/')
将失败,因为可执行文件不在$PATH
环境变量中定义的目录中。另一方面,这:
subprocess.Popen(['/tmp/nii-sdcme'], cwd='/tmp/')
我们会成功的
从文档中:
如果cwd不是None,则子目录的当前目录将更改为
在执行之前执行cwd。请注意,不考虑此目录
搜索可执行文件时,不能指定程序的
相对于cwd的路径。
编辑(根据OP对该问题的评论)
如果我更改os.chdir(所需的/path),然后cann,怎么样
子进程调用('nii\U sdcme%s'%a]
这将使niu sdcme
使用desired/path
作为运行目录os.chdir
更改当前进程(当前解释器)的路径。如果随后调用nii_sdcme
可执行文件而不指定cwd
参数,生成的子进程将使用父进程的当前目录作为当前目录
(!)小心:即使您通过
os.chdir
更改可执行文件的当前目录,您仍然需要提供nii_sdcme
可执行文件的完整路径(除非nii_sdcme
位于$path
环境变量中指定的目录之一)您计划如何从python运行shell脚本的可能重复?您想为整个python脚本或仅为shell脚本更改到该目录吗?@EtanReisner仅为shell脚本执行此操作,然后调用subprocess.call('nii_sdcme%s'%a')谢谢@BorrajaX!!这帮了我。很高兴我帮了我。:-)玩得开心!!:我尝试了以下语法,但出现了以下错误:os.chdir('/dicom/1013/0007')subprocess.Popen(['nii_mdir_sdcme%s%a%s])错误:TypeError:格式字符串的参数不够“您能帮我一下吗?@tryeverylanguage:这可能是另一个问题,但是您试图创建一个格式化的字符串,却没有告诉它要格式化什么:这很好:print(“Hello:%s%s”('world',7))”
但是如果字符串需要2个“%s”,而您只传递了一个,那么您会得到错误:print(“Hello:%s%s%%(7))“
subprocess.Popen(['/tmp/nii-sdcme'], cwd='/tmp/')