3

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

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

问题是标准输出被重定向到日志并且程序使用 & 启动(我们在 UNIX 上)。

我如何与这个程序启动 java Test & 与标准输入和标准输出进行交互?

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

谢谢!

4

4 回答 4

1

如果程序可以从标准输入读取密码,您可以让 Unix 脚本提示输入密码,然后启动 Java 应用程序并将密码传递给它,例如:

echo $PASSWORD | java Test >log.out &

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

于 2010-10-11T10:43:32.030 回答
0

一种选择是使用echos 将输入通过管道传输到您的程序:

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

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

< input_file java Test >& logfile &
于 2010-10-11T10:42:39.640 回答
0

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

但请注意,Expect 是出了名的脆弱,您最好避免在生产场景中使用它。

于 2010-10-12T14:07:00.027 回答
0

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

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

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

于 2010-10-12T14:32:32.383 回答