Java程序stdout和从前台分离

时间:2010-10-11 10:32:31

标签: unix redirect tty nohup

我有一个java程序,比方说Test.class。

当我执行java Test时,程序要求输入密码然后继续。

问题是stdout被重定向到日志,程序是用& (我们在UNIX上)。

我如何与这个程序互动推出java Test&与stdin和stdout一起?

一种可能的解决方案是在前台启动程序,然后在条件下从java中运行它。

谢谢!

4 个答案:

答案 0 :(得分:1)

如果程序可以从stdin读取密码,则可以输入密码的Unix脚本,然后启动Java应用程序并将密码传递给它,例如:

echo $PASSWORD | java Test >log.out &

或者您可以考虑将Java应用程序拆分为两部分;可能有一个交互式“前端”部分验证密码,然后一旦验证密码,就可以启动“后端”部分作为后台进程并退出。

答案 1 :(得分:0)

一种选择是使用echo s将输入传递给您的程序:

(echo input1
 echo input2
 ....
) | java Test >& logfile &

或者,如果输入数量很大,您还可以将输入放在一个文件中,并将文件内容重定向为:

< input_file java Test >& logfile &

答案 2 :(得分:0)

我在这个问题中没有看到任何特定的Java,如果你想根据应用程序输出驱动stdin,你可以使用Expect实用程序:http://en.wikipedia.org/wiki/Expect

要注意,Expect是非常脆弱的,你应该明智地避免在生产场景中使用它。

答案 3 :(得分:0)

实际上,如果您只想输入密码,也许您可​​以尝试在前台启动应用程序(不带尾随&amp;)。

然后,在输入密码后,按Ctrl + Z或在另一个shell中执行kill -SIGSTP <pid>以暂停程序。最后,输入bg将其置于后台。

有关详细信息,请阅读有关shell的作业控制功能的文档。