2017-08-03 75 views
0

我想运行一个特定的命令,因为我的子分区中有匹配的文件。每个文件都是这样命名的:sub-01_T1w,sub-02_T1w ...。我试图运行的命令如下所示:“bet -F -m”。Python:运行os.system以匹配文件

编辑我的问题:每次运行脚本时,都不会替换通配符。文件路径是正确的,但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

所以...什么是你的问题? – yuhow5566

+0

我在这里找不到问题。你的尝试是否奏效?如果不是,它是如何失败的?它有什么作用?有错误吗?它是什么?如果你愿意,我还有更多的问题......但最好是完全重写这个问题 –

回答

0

你可能误会了怎么glob.glob作品。它根据作为参数给出的模式计算文件路径列表。

你不应该传给glob.globos.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,因为我发现它更清晰。这是一个风格问题,做你喜欢

编辑:取代subproces.callos.system,为suggested by STD

+0

感谢您的帮助! – STD

+0

@STD最好避免使用'os.system'并使用'subprocess.call'来代替 - 这样你就不必担心外壳的转义参数了......所以上面的代码就是'subprocess.call (['bet',file,file +'_ T1w_brain','-f','-m'])' –

+0

@Jon Clements谢谢你,你的代码工作正常! – STD