在Linux问题上使用ssh的Java Runtime.exec()

时间:2012-04-25 18:41:17

标签: java linux ssh runtime.exec

我正在尝试使用Runtime.exec()启动一个新进程,但我的问题在于使用ssh到remote in然后在那里运行一个java程序。代码:

test = "ssh -t username@host java packageName.ClassName portNumber (Other command line args for this class)"
Process proc = Runtime.getRuntime().exec(new String[] {"/bin/bash", "-c", test});

这不会失败或捕获,但我需要能够看到新运行进程的stdout而我没有。

注意:如果我从命令行运行ssh -t username@host java packageName.ClassName portNumber (Other command line args for this class)它可以正常工作。我通过使用ssh密钥设置主机不需要密码。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您需要使用Process.getInputStream来获取正在创建的子流程的输出。

有关Runtime.exec的详细讨论,请参阅this article

答案 1 :(得分:1)

我认为您可以要求输入流与流程的标准输出相对应,然后将其打印在标准输出上。如果您需要在执行后查看它,只需在流程上调用waitFor()方法,以便在开始打印之前完成。

答案 2 :(得分:1)

使用getInputStream()访问返回进程的stdout。您还可以使用ProcessBuilder.Redirect提供的设施。