2011-10-26 56 views
3

我想写一个python脚本(是不是Bash),它将使用flac文件并使用oggenc对它们进行编码,然后在成功编码时删除flac文件。Python oggenc脚本

到目前为止,我有这样的:

import os, sys 
import fnmatch 

command = 'oggenc -q7 *.flac' 

def main(): 
    for root, dirs, files in os.walk('/home/wagnerf/test'): 
     for name in files: 
      if fnmatch.fnmatch(name, '*.flac'): 

我有种想用

os.system("bash -c %s" % command)

后,如果但就不行,说的

ERROR: No input files specified. Use -h for help.

我猜我必须在我的命令中使用该名称?

编辑 我的文件结构如下somethibg这样的:

-- test 
    -- test1 
    -- test1.flac 
    -- test2.flac 
    -- test2 
    -- test3.flac 
    -- test1.flac 

而且我希望这些FLAC文件转换在同一个目录下OGG,基本上我想自动

cd /somedir/ 
oggenc -q7 *.flac 
cd .. 
cd /someotherdir/ 
oggenc -q7 *.flac 

这样我就不必一直输入子目录!

答:

@larsmanns非常感谢你,只是不得不做出一些调整:

from fnmatch import fnmatch 
import os, sys 
import subprocess 

def main(): 
    for root, dirs, files in os.walk('/home/wagnerf/test'): 
     flacs = [f for f in files if fnmatch(f, '*.flac')] 
     if flacs: 
      for file in flacs: 
       cmd = 'oggenc', '-q7', '%s' % file 
       subprocess.check_call(cmd, cwd=root) 

FLACS返回一个列表,我们需要利用每oggenc的文件,以便为每个元组做... 无论如何,再次感谢其余的很容易!

BTW

我完成了脚本,你可以在这里找到它:musico

+1

为什么不通过'os.system(“oggenc -q7%s”%os.path.join(root,name))'运行oggenc?它将与你的默认shell一起运行,通常是bash。 –

+0

@dr见上文编辑 –

+0

@ wagner-felix:''%s'%file'与'file'完全相同。编辑我的答案,以一种更简洁的方式反映你的变化;我不知道'oggenc'工具,所以我只是假定它可以处理每个命令的多个文件。 –

回答

1

使用subprocess模块调用外部命令,即提供更细致的控制:

from fnmatch import fnmatch 
import os 
import subprocess 

def main(): 
    for root, dirs, files in os.walk('/home/wagnerf/test'): 
     flacs = [f for f in files if fnmatch(f, '*.flac')] 
     for f in flacs: 
      cmd = ['oggenc', '-q7', f] 
      subprocess.check_call(cmd, cwd=root) 

cwd在执行命令之前,关键字参数会更改为指定的目录。 globbing(文件名模式匹配)已由fnmatch完成,因此需要在两者之间调用一个shell。

您可以用os.remove删除文件;我还没有把它放在这个例子中。另外,上面的代码片段未经测试。

+0

嗯,文件是[] –

+0

@ wagner-felix,那么你在一个空目录。你可能想检查'flacs'是否是非空的,我将其添加到答案中。 –