我想运行一个特定的命令,因为我的子目录中有匹配的文件。每个文件的名称都是这样的:sub-01_T1w,sub-02_T1w ....我试图运行的命令如下所示:“bet -F -m”。
编辑我的问题:每次运行脚本时都不会替换任何通配符。文件路径是正确的,但os命令每次都是子[0-9] [0-9]而不是:sub-01,sub-02,...。
我的第一次尝试看起来像这样:
import glob
import os
path = '/home/nico/Seminar/demo_fmri/'
subdirs = glob.glob('%s/sub-[0-9][0-9]'%(path))
for dir in subdirs:
print dir
glob.glob(os.system("bet %s/anat/sub-[0-9][0-9]_T1w %s/anat/sub-[0-9][0-9]_T1w_brain -F -m"%(dir,dir)))
答案 0 :(得分:0)
您可能误解了glob.glob
的工作原理。它根据您作为参数提供的模式计算文件路径列表。
您不应该将glob.glob
的结果传递给os.system
,这可能不是您想要做的。
尝试使用以下内容解决您的问题:
import glob
import os
import subprocess
path = '/home/nico/Seminar/demo_fmri/'
subdirs = glob.glob(os.path.join(path, 'sub-[0-9][0-9]'))
for dir in subdirs:
print dir
for file in glob.glob(os.path.join(dir, 'anat/sub-[0-9][0-9]_T1w')):
subprocess.call(['bet', file, file+'_brain', '-f', '-m'])
奖励: %s
在需要时被移除,以支持os.path.join
。另外,我在最后一行使用str.format
,因为我发现它更清楚。这是一个风格问题,按你喜欢的方式做
修改:将os.system
替换为subproces.call
,suggested by STD