在java中执行linuxterminal命令?

我试图从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); } } 

当我在terminal执行相同的sox命令时,它的工作正常。 我真的不明白是什么问题! 是因为“|” 符号??

Solutions Collecting From Web of "在java中执行linuxterminal命令?"

问题是Runtime.exec()不理解shell的概念,如“|”。 请尝试:

 Runtime.getRuntime().exec("/bin/sh", "-c", co); 

问题是exec直接运行一个二进制文件而不调用shell。 “|” 字符只能被shell识别,而不能被sox识别。 “-c”指示shell运行单个命令,并将整个命令作为单个参数传递。

这很可能与执行命令的环境有关,可能是以下任何一种情况:

  • sox可执行文件无法找到(在命令中放置完整路径)
  • 用户没有权限运行sox命令(检查文件权限中的执行位)
  • 从Java运行命令时, sox所需的一些环境变量不会被初始化(请查阅sox文档)
  • 如果speech_16.wavsox的输入文件,则无法找到该文件(将.wav文件的完整路径添加到命令中)
  • 如果sox需要创建一个输出文件,那么由于目录权限的原因,它不具备这样的权限,因为存在一个名称不能覆盖的现有文件,或者由于文件系统空间不足。