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

1 投票
1 回答
2510 浏览
提问于 2025-04-18 17:28

我正在尝试在命令行中使用Python的subprocess模块来调用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 个回答

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)

撰写回答