Java运行bash命令,同时为其提供输入并获取输出

标签 java process execute

我必须写下一些运行外部进程的java代码。 此过程从 stdin 获取输入行,并在 stdout 上给出输出行。

我写的代码如下

try
{            
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec("./" + args[0]);
    Process proc2 = rt.exec(c);
    int exitVal = proc2.exitValue();
    System.out.println("Process exitValue: " + exitVal);
} 
catch (Throwable t){
}

其中 args[0] 是外部进程,c 是我需要提供给进程的输入(字符串)。如果运行正确,我会得到 exitVal=0,但什么也得不到。另外,我真正想要打印的是外部进程的输出(在给定的示例中为“6”)。

最佳答案

您必须在进程上使用 getInputStream()getOutputStream() 来进行通信,请参阅 javadocs .

如果不从进程中读取所有数据,它可能会挂起甚至死锁。常见问题的简要介绍,请参见this blog post 。至少,您应该从进程输出中读取所有数据。

关于Java运行bash命令,同时为其提供输入并获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907789/

相关文章:

java - Android:点击按钮后应用程序崩溃

pyinstaller - 禁用用pyinstaller获取的错误信息(failed to execute script)

java - 这是集成测试还是单元测试? (在 Spring 测试休息 Controller )

java - 处理对象映射器异常和缺少返回语句

python-2.7 - 将 multiprocessing.Pool 与异常处理结合使用

php - 插入不起作用,准备、绑定(bind)和执行,但不起作用

java - Java 中具有继承性的 Varargs

java - 如何使用邮件合并将符号从 Excel 获取到 Word

c - 子进程的 SIGTSTP 信号处理程序

c# - 以编程方式在 vista 中以管理员身份运行 cmd.exe,C#