如何在Python中执行复杂的SoX命令行字符串

时间:2014-08-16 01:05:01

标签: python subprocess sox

我正在尝试使用Python中的子进程模块在命令行上调用SoX来处理音频文件。

Python抱怨它无法找到文件,但是如果直接从命令行调用,则相同的命令可以正常工作。

因此Python不喜欢我如何构造命令 - 我不认为它喜欢双引号,但我无法弄清楚如何用Python接受的语法来表示它。这是Python不喜欢的命令:

s = ['sox', '-m', 'path/to/silence.wav',
     '"|sox path/to/audio1.wav -p pad 0"',
     '"|sox path/to/audio2.wav -p pad 5"',
     '"|sox path/to/audio3.wav -p pad 10"',
     'path/to/output.wav']
subprocess.call(s)

以下是从命令行调用的相同命令:

sox -m path/to/silence.wav "|sox path/to/audio1.wav -p pad 0" "|sox path/to/audio2.wav -p pad 5" "|sox path/to/audio3.wav -p pad 10" path/to/output.wav

如果有任何Python专家可以举例说明如何在.py中执行此操作,那将非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:1)

解决方案发现,我只需删除双引号......傻傻的我。这是上面示例中正确的Python代码:

s = ['sox', '-m', 'path/to/silence.wav',
     '|sox path/to/audio1.wav -p pad 0',
     '|sox path/to/audio2.wav -p pad 5',
     '|sox path/to/audio3.wav -p pad 10',
     'path/to/output.wav']
subprocess.call(s)