Python oggenc脚本

Python oggenc脚本,python,Python,我想编写一个python脚本(不是Bash而是Yes),它将使用flac文件,并使用oggenc对它们进行编码,然后在编码成功后删除flac文件 到目前为止,我有: 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:

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

到目前为止,我有:

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'):
我有点想用

系统(“bash-c%s”%命令)

在if之后,但那不起作用,比如

错误:未指定输入文件。使用-h获得帮助

我想我必须在命令中使用这个名字

编辑 我的文件结构将如下所示:

-- test
   -- test1
     -- test1.flac
     -- test2.flac
   -- test2
     -- test3.flac
     -- test1.flac
我想把那些flac文件转换成同一个目录下的ogg,基本上我想自动化

cd /somedir/
oggenc -q7 *.flac
cd ..
cd /someotherdir/
oggenc -q7 *.flac
这样我就不必总是进入子目录

回答:

@拉斯曼非常感谢你,只是需要做一些调整:

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,所以对于每个元组都要。。。 无论如何,再次谢谢,剩下的很简单

顺便说一句

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

使用模块调用外部命令,它提供了更详细的控制:

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.system(“oggenc-q7%s”%os.path.join(root,name))
?它将与默认shell一起运行,通常是bash。@wagner felix:
'%s'%file
与刚才的
file
完全相同。编辑我的答案,以更简洁的方式反映您的变化;我不知道
oggenc
工具,所以我假设它可以处理每个命令的多个文件。@wagner felix,那么你就在一个空目录中了。您可能需要检查
flacs
是否为非空,我会将其添加到答案中。