如何在 Java 的 linux 终端中交互地执行多个命令?

Posted

技术标签:

【中文标题】如何在 Java 的 linux 终端中交互地执行多个命令?【英文标题】:How to execute multiple commands interactively in linux terminal from Java? 【发布时间】:2016-07-28 06:37:52 【问题描述】:

我想在linux terminal 中运行多个命令,如下所示:

1. 我会运行假设torch 并且我写了th 命令并打开了火炬提示。 2. 现在,如果我从 java 执行下一个命令,那么它将在 linux 终端的 torch promt 中运行。你可以举另一个例子比如:1.首先我会在 linux 终端从 java 中运行 python2. strong> 然后从 java 运行 1+1 或 python 解释器中的任何内容。 所以这里我的第二个命令依赖于第一个命令。我想按顺序在终端中运行命令。

编辑:另一种方法可以。假设我有一个在 linux 终端中运行的 python 解释器,现在我想从 java 执行一个命令,该命令将在该特定打开的 linux 终端的 python 解释器中运行. 我可以这样做吗?

我尝试使用这个来运行命令:

        String line;
            try
            

                String execstr= "th"; //It opens the torch promt in linux terminal.

                Process p = Runtime.getRuntime().exec(execstr);
                BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

                /*if((line= input.readLine())==null)
                    System.out.println("blank");*/

                while ((line = input.readLine()) != null) 
                
                    System.out.println(line);
                
                input.close();
            
            catch(Exception e)
            

                e.printStackTrace();
            

        
    

但是现在在这个命令之后,我怎样才能在 promt 中运行来自 java 的命令,这意味着我想要它交互??

那么如何保存上一个命令的状态并将其用于下一个命令??

【问题讨论】:

【参考方案1】:

使用p.getOutputStream() 获取一个流,您可以在其中为您运行的程序写入所需的输入。 (我知道,命名有点混乱)。

只是相关部分:

    Process p = Runtime.getRuntime().exec(execstr);
    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
    OutputStream ops = p.getOutputStream();
    ops.write("echo hello world".getBytes());
    ops.close();            

    while ((line = input.readLine()) != null) 
    
       System.out.println(line);
    
    input.close();

【讨论】:

如果我在 linux 终端中编写它,它将打开一个解释器,并且我在该解释器中运行了一个 torch7 模型。现在我想在之前运行的那个解释器中运行另一个命令来自java 我在 p.getOutputStream 和 ops.write() 函数中实际上在做什么?我可以从 java 对 linux 中打开的终端运行命令吗?? 我不知道你的答案是否适合我的问题?? 无论你在ops 中写入什么都是进程p 的输入;在您的示例中,它用作th 的输入 我也不确定,因为你的问题有点难以理解,抱歉:-/

以上是关于如何在 Java 的 linux 终端中交互地执行多个命令?的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

如何在后台运行Linux命令?

如何使用Nmon监控Linux系统性能

如何高效的在后台运行 Linux 命令?

linux中怎样开机启动python程序

expect入门--自动化linux交互式命令