Python: 运行 os.system 用于匹配文件

Python: Run os.system for matching files

只要我的子目录中有匹配的文件,我就想 运行 执行一个特定的命令。每个文件都这样命名:sub-01_T1w、sub-02_T1w …。我正在尝试 运行 的命令如下所示:“bet -F -m”。

编辑 我的问题:每次我 运行 脚本 none 的通配符都会被替换。文件路径是正确的,但是 os 命令每次都是 sub-[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)))

您可能误解了 glob.glob 的工作原理。它根据您作为参数提供的模式计算文件路径列表。

您不应该将 os.system 的结果传递给 glob.glob,这可能不是您想要的。

尝试用这样的方式解决您的问题:

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,如