如何在 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 中运行 python
。2. 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 终端中交互地执行多个命令?的主要内容,如果未能解决你的问题,请参考以下文章