当前位置: 首页 > 面试题库 >

在Java中执行Linux终端命令?

韩佐
2023-03-14
问题内容

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


问题答案:

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

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

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



 类似资料:
  • 我知道有很多关于这个的线索,但是没有一个对我有用。以下是我试图做的: Javac并从我的java代码中运行一个文件。它适用于视窗系统,但我想让它也适用于UNIX。代码如下: 问题是,在UNIX系统上,它的行为“不可预测”,例如: 打开图像,但 它什么也没做。没有按摩。 我非常感谢您的任何意见。 更新--------------------------------------------------

  • 我希望在中运行多个命令,如下所示: 那么如何保存上一个命令的状态并将其用于下一个命令??

  • 关于通过Java向终端发送命令,我遇到了一个非常令人困惑的问题。我有这个密码: 第一个命令是这个"useradd user-p密码-d /home/ftp/test/-s /bin/false",第二个应该是这个回显用户名:new_password|chpasswd,第一个命令工作没有任何问题,并创建了我定义的用户"服务器"变量,但当我试图执行第二个命令来改变用户传递此命令可能永远不会发生,输出为

  • 问题内容: 这里的目标是在新的shell中运行新的python文件,并在现有的shell中运行现有的python文件。说我有两个文件,aaa.py和bbb.py。为了简单起见,aaa.py所做的只是… …并且可以说bbb.py确实是… 现在的目标是在终端1中运行aaa.py,并使其在终端2中启动bbb.py。我希望存在类似下面的命令,但无法弄清楚。 问题答案: 通常,无法从shell进行此操作。您

  • 问题内容: 我正在尝试将控制台置于Java中的“原始”模式。我了解这仅适用于UNIX。 我正在使用命令 如果我直接在终端中键入命令,它将完成应有的操作。在Java中,我尝试设置如下模式: 但是终端不会进入原始模式。 我有一种感觉,这是因为Java只是在后台的虚拟终端中执行命令,而不是在活动终端中执行命令。有没有办法做到这一点? 问题答案: 由于JVM重定向了stdio / stdout / std

  • 问题内容: 我前一段时间读过这篇文章,但似乎找不到。我试图找到一个将在终端中执行命令然后输出结果的命令。 例如:脚本将是: 它将在终端中运行该命令的结果 问题答案: 做这件事有很多种方法: 一种简单的方法是使用os模块: 子流程模块可以实现更复杂的事情:例如: