一尘不染

在Java中执行Linux终端命令?

linux

我正在尝试从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命令时,它的工作正常。我真的不明白问题是什么!是因为“ |” 符号??


阅读 1383

收藏
2020-06-07

共1个答案

一尘不染

问题是Runtime.exec()无法理解shell概念,例如“ |”。而是尝试:

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

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

2020-06-07