3

私はJavaプログラムを持っています.Test.classとしましょう。

Java Test を実行すると、プログラムはパスワードを要求してから続行します。

問題は、stdout がログにリダイレクトされ、プログラムが & で起動されることです (ここでは UNIX を使用しています)。

Java Test を起動したこのプログラムと stdin および stdout を使用して対話するにはどうすればよいですか?

考えられる解決策の 1 つは、プログラムをフォアグラウンドで開始し、条件の後で Java からバックグラウンドで実行することです。

ありがとう!

4

4 に答える 4

1

プログラムが stdin からパスワードを読み取ることができる場合は、Unix スクリプトでパスワードのプロンプトを表示し、Java アプリケーションを起動してパスワードを渡すことができます。次に例を示します。

echo $PASSWORD | java Test >log.out &

または、Java アプリケーションを 2 つの部分に分割することを検討できます。パスワードを検証するインタラクティブな「フロントエンド」部分が1つあり、パスワードが検証されると、バックグラウンドプロセスとして「バックエンド」部分を起動して終了できます。

于 2010-10-11T10:43:32.030 に答える
0

この質問には Java 固有のものは何も表示されません。アプリケーションの出力に基づいて stdin を駆動したい場合は、Expect ユーティリティを使用できます: http://en.wikipedia.org/wiki/Expect

ただし、Expect は壊れやすいことで有名です。本番環境での使用は控えた方が賢明です。

于 2010-10-12T14:07:00.027 に答える
0

実際、パスワードの入力のみを可能にしたい場合は、アプリをフォアグラウンドで (末尾の & なしで) 起動してみてください。

kill -SIGSTP <pid>次に、パスワードを入力したら、プログラムを中断するためにCtrl+Z を押すか、別のシェルで押します。最後に、入力bgして背景に配置します。

詳細については、シェルのジョブ制御機能に関するドキュメントをお読みください。

于 2010-10-12T14:32:32.383 に答える
0

1 つのオプションは、次のようにechos を使用して入力をプログラムにパイプすることです。

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

または、入力の数が多い場合は、入力をファイルに入れ、ファイルの内容を次のようにリダイレクトすることもできます。

< input_file java Test >& logfile &
于 2010-10-11T10:42:39.640 に答える