【问题标题】:How to answer a command from the Terminal in Java如何用 Java 从终端回答命令
【发布时间】:2019-02-22 15:29:54
【问题描述】:

我想从 Java 执行一个命令,但是这个命令要我给它一个用户名。

像这个例子:

$我的命令

[命令] 用户名:_

那么如何在 Java 中为命令提供我的用户名?

目前我的代码是这样的:

    Process p = Runtime.getRuntime().exec(command);
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String s;
    while ((s = br.readLine()) != null){
        System.out.println(s);
    }
    br.close();
    p.waitFor();
    p.destroy();

【问题讨论】:

标签: java terminal linux-mint


【解决方案1】:

您需要创建另一个线程并通过process#getOutputStream() 抽取用户输入。请参阅以下示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class ProcessWithInput {

    public static void main(String[] args) throws IOException, InterruptedException {
        Process p = Runtime.getRuntime().exec("cat");
        OutputStream os = p.getOutputStream();
        os.write("Hello World".getBytes());
        os.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String s;
        while ((s = br.readLine()) != null) {
            System.out.println(s);
        }
        br.close();
        p.waitFor();
        p.destroy();
    }
}

当然,您需要进行适当的错误/异常处理等。

其他选项是使用ProcessBuilder,它允许您通过文件提供输入。

【讨论】:

  • 抱歉,您能解释一下如何指定用户名吗?
  • 查看编辑后的代码。一般来说,无论你写到p.getOutputStream(),都会被写到进程的输入流中。请注意,您可能必须刷新或关闭输出流才能让进程获取输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 2020-10-01
  • 2013-02-27
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多