2011-12-15 12 views
0

システムコマンドをリモートで実行できる小さなクライアント/サーバーアプリケーションを作成しました。非対話型プログラムでは、出力を読む必要がある場合のみ正常に動作します。しかし、必要な場合にプロセスが開始されたときに、ユーザー入力を確実に送信する方法はありますか?プロセスが入力を促すかどうかを調べるにはどうすればよいですか?対話型CLIプログラムのリモート実行

+0

あなたはSSHを使用して見たことがありますか? (jSSHのようなJavaライブラリを介して)それはあなたがしようとしているようなものは非常に似ているように見えます。おそらくあなたはそれがどのように動作するか(または単にJavaをサーバにインストールする必要がなく、動作しても動作する)からいくつかのアイデアを取ることができます。 –

+0

私はSSHが本当に必要ではありません。持ってる。私は標準のJavaライブラリを使用してこれを実装したいと思います(もし可能であれば)。 – Ree

+0

SSHをサポートするJavaライブラリがあります。あなたはLinuxにとっては些細なことであり、Windowsにとってはかなり簡単なSSHサーバが必要です。 –

答えて

1

「expectj」をご覧ください。これはhttp://en.wikipedia.org/wiki/Expect

http://expectj.sourceforge.net/

例のポートです:

// Create a new ExpectJ object with a timeout of 5s 
ExpectJ expectinator = new ExpectJ(5); 

// Fork the process 
Spawn shell = expectinator.spawn("/bin/sh"); 

// Talk to it 
shell.send("echo Chunder\n"); 
shell.expect("Chunder"); 
shell.send("exit\n"); 
shell.expectClose(); 
+0

問題は、クライアントからリモートプログラムを実行しているユーザーが、何を "期待する"かわからないことです。リモートで実行されるプロセスが必要とするときはいつでも、入力を促されます。 – Ree

+0

ああ、私はあなたが何をしたのか今見ていると思う。これで、プロセスの出力ストリームから読み込むことができます。例えばSystem.exec()はProcessを返します。Process.getOutputStream()は次のように出力ストリームを返します。次に、ユーザー入力をプロセスのInputStreamに送信します。意味がありますか? – laher

+0

入力を送信する必要があることをどのように知ることができますか? – Ree

関連する問題