【问题标题】:Python: Run os.system for matching filesPython:运行 os.system 以匹配文件
【发布时间】:2017-08-03 06:10:14
【问题描述】:

我想在我的子目录中有匹配的文件时运行一个特定的命令。每个文件的命名如下: sub-01_T1w, sub-02_T1w ... 。我尝试运行的命令如下所示:“bet -F -m”。

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

【问题讨论】:

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

标签: python operating-system wildcard glob


【解决方案1】:

您可能误解了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,为suggested by STD

【讨论】:

  • 感谢您的帮助!
  • @STD 最好避免使用os.system 并改用subprocess.call - 这样你就不必担心转义shell等参数......所以上面是@ 987654333@
猜你喜欢
  • 2012-10-30
  • 2016-08-24
  • 1970-01-01
  • 2011-11-29
  • 2012-09-24
  • 1970-01-01
  • 2020-09-28
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多