我正在尝试使用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密钥设置主机不需要密码。
有什么想法吗?
答案 0 :(得分:2)
您需要使用Process.getInputStream来获取正在创建的子流程的输出。
有关Runtime.exec
的详细讨论,请参阅this article。
答案 1 :(得分:1)
我认为您可以要求输入流与流程的标准输出相对应,然后将其打印在标准输出上。如果您需要在执行后查看它,只需在流程上调用waitFor()
方法,以便在开始打印之前完成。
答案 2 :(得分:1)
使用getInputStream()
访问返回进程的stdout。您还可以使用ProcessBuilder.Redirect
提供的设施。