我有一个java程序,比方说Test.class。
当我执行java Test时,程序要求输入密码然后继续。
问题是stdout被重定向到日志,程序是用& (我们在UNIX上)。
我如何与这个程序互动推出java Test&与stdin和stdout一起?
一种可能的解决方案是在前台启动程序,然后在条件下从java中运行它。
谢谢!
答案 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的作业控制功能的文档。