使用Python subprocess调用Sox

4

我正在尝试使用subprocess.call来运行以下sox命令:

import subprocess
subprocess.call(['sox','-n','-b','16','output.wav','synth','2.25','sine','300','vol','0.5'])

虽然这个命令在Unix命令行上运行良好,但在这里我收到以下错误:

OSError: [Errno 2] No such file or directory 

我也尝试使用os.system:

os.system('sox -n -b 16 output.wav synth 2.25 sine 300 vol 0.5')

我遇到了一个“command not found”错误。调用其他Unix命令对我来说很顺利,例如:

subprocess.call(['say' ,'hello'])

任何想法?我运行的操作系统是10.8.4,python版本是2.7.6,sox版本是14.4.1。

2
很可能是当从Python中调用sox时,它在PATH路径中不存在,请尝试使用程序的完整路径名。 - cdarke
2
啊。是的,我只是还没有找到正确的指定方式:subprocess.call(['/Applications/sox-14.4.1/sox', '-n','-b','16','output.wav','synth','2.25','sine','300','vol','0.5']) - Jennifer Culbertson
4个回答

1

使用以下命令并将Shell设置为True:

subprocess.call(command, shell=True)

1
尝试使用cmdstring = "sox -n -b 16 relative_path/output.wav synth 2.25 sine 300 vol 0.5",然后调用os.system(cmdstring)。

0

在寻找不同问题的答案时看到了这个。

我使用子进程和sox play命令播放mp3文件,但我必须使用'.Popen'拆分命令和参数 - 不认为我可以使用call使其工作

SOX_CMD = '/usr/bin/play'

# use replace to escape any spaces in path
split_char = "~"
play_command = SOX_CMD + split_char + audio_file +  split_char + "-V1" + split_char + "trim" + split_char + start_time
print('PLAY COMMAND : ' + play_command)
SOX_PROCESS = subprocess.Popen(play_command.split(split_char), stdout=SOX_LOG_FILE_HANDLE, stderr=SOX_LOG_FILE_HANDLE)

0

你最好换成pysox,它提供了Python绑定到sox。


只是它们的文档缺失了,我无法弄清如何使用它。 - Shani Shalgi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接