我试图从java执行SOX命令,但遗憾的是它每次都会返回错误。其他每个SOX命令都运行得很好!! 这是代码:
class Simple {
public static void main(String args[]) throws IOException, Exception {
Process p;
BufferedReader br;
String co = "sox speech_16.wav -p pad 0 2.5 | sox - -m speech_16.wav speech_output.wav";
p = Runtime.getRuntime().exec(co);
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
int returnCode = p.waitFor();
System.out.println("reurn code : "+returnCode);
}
}
当我在终端中执行相同的sox命令时,它工作正常。我真的无法理解问题是什么!是因为' |'符号??
答案 0 :(得分:8)
问题是Runtime.exec()不理解shell概念,例如“|”。而是尝试:
Runtime.getRuntime().exec("/bin/sh", "-c", co);
问题是exec直接运行二进制文件而不调用shell。 “|”字符只能由shell识别,而不是由sox识别。 “-c”告诉shell运行单个命令,并将整个命令作为单个参数传递。
答案 1 :(得分:-1)
这可能与执行命令的环境有关,可能是以下任何一种情况:
sox
可执行文件(将完整路径放在命令中)sox
命令(检查文件权限中的执行位)sox
所需的某些环境变量未初始化(请参阅sox文档)speech_16.wav
是sox
的输入文件,则无法找到该文件(将.wav文件的完整路径添加到命令中)sox
需要创建一个输出文件,那么由于目录权限,它没有这样做的权限,因为存在一个具有该名称但不能被覆盖的现有文件,或者由于缺少文件系统上的空间。