Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:更改终端当前目录并调用脚本_Python_Bash_Terminal - Fatal编程技术网

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

检查文件夹中是否存在特定文件后,我想从python调用名为
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/')