JavaコードからUnixコマンドを送信するために使用できるライブラリを探しています。私はすでにExpect4JとGaynmedを試してみましたが、良い文書を見つけることができませんでした。私の要件は次のとおりです。Javaからunixコマンドを実行するライブラリ
- 複数のコマンドを実行しています。
- 前のコマンドの出力をキャプチャします。
- アクションを実行/最後のコマンドの出力に基づいて別のコマンドを実行します。
何か指摘します。
JavaコードからUnixコマンドを送信するために使用できるライブラリを探しています。私はすでにExpect4JとGaynmedを試してみましたが、良い文書を見つけることができませんでした。私の要件は次のとおりです。Javaからunixコマンドを実行するライブラリ
何か指摘します。
あなたが言及したライブラリの名前を見ると、は、sshを使用してリモートサーバ上でコマンドを実行したいようです。
http://code.google.com/p/sshxcute/
コードをチェックアウトするには、出力を取得することは簡単すぎる
// Initialize a ConnBean object, parameter list is ip, username, password
ConnBean cb = new ConnBean("ip ", "username","password");
// Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
ssh = SSHExec.getInstance(cb);
// Connect to server
ssh.connect();
CustomTask sampleTask = new ExecCommand("echo 123");
ssh.exec(sampleTask);
とても簡単です。私が提供したリンクをチェックするだけです。
Result res = ssh.exec(task);
if (res.isSuccess) {
System.out.println("Return code: " + res.rc);
System.out.println("sysout: " + res.sysout);
} else {
System.out.println("Return code: " + res.rc);
System.out.println("error message: " + res.error_msg);
}
Java標準ライブラリのProcessBuilder
クラスは、プロセスの作成と出力の読み取りをサポートしています。必要な作業を行うためにビルドすることができなければなりません。標準ライブラリに入っていれば、かなり良い文書があります。
それは、彼が求めているものではありません。彼はsshを使ってリモートサーバ上でコマンドを実行したいと思っています。私の答えをチェックしてください。 –
@Michael答えをありがとう。私はProcessBuilderを試していませんが、1つのセッションで複数のコマンドを実行できるようにするか、すべてのコマンドの後にセッションを閉じる必要がありますか? – Vivek
@ user473768 'ProcessBuilder'は実際には「セッション」を持っていませんが、複数のプロセスに対して同じ' ProcessBuilder'インスタンスを再利用できるはずです。 –
あなたが行っていることに応じて、ANTは良い方法です。 antスクリプトを作成すると、そのスクリプトをjava内から実行できます。 Antは他の環境でもよりよくサポートされます
ProcessBuilderはあなたのニーズには不十分ですか?あなたは確かに出力ストリームをつかんで、最後のコマンドの終了値を得ることができます。これは、正規表現によって#3を実行するのに十分です。 #1では分かりません。しかし、生のProcessBuilderで必要なことをすることは、かなり軽量な解決策であるように思えます。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html
答えをありがとう。私はProcessBuilderを試していませんが、1つのセッションで複数のコマンドを実行できるようにするか、すべてのコマンドの後にセッションを閉じる必要がありますか? – Vivek
あなたはJavaのビルトインProcess
クラスを検討したことがありますか?コマンドの終了値を取得し、シェルの出力を取得することができます。
exec()
メソッドの使用に問題がありますか?
Process p = Runtime.getRuntime().exec("ls -l");
:
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
あなたのコマンドはシンプルかつインタラクティブでない場合は、プレーンJavaを使用して」日を実行することができ、以下のように:
Process process = runtime.exec("unix command");
InputStream iStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(iStream);
BufferedReader bufReader = new BufferedReader(inputStreamReader);
while ((String line = bufReader.readLine()) != null) {
System.out.println("\nOUTPUT = " + line);
}
ライブラリについては、ProcessBuilderをチェックしてください。
また、これをチェック:How to run Unix shell script from java code?
答えをありがとう。私はsshxcuteを試していませんが、1つのセッションで複数のコマンドを実行できるようにするか、すべてのコマンドの後にセッションを閉じる必要がありますか? – Vivek
1つのセッションで複数のコマンドを実行できます。 Googleコードページを確認してください。それはすべての詳細を持っています。一番下のコードは、1つのセッションで2つのコマンドct1とct2を実行します。 –