2012-01-24 3 views
4

JavaコードからUnixコマンドを送信するために使用できるライブラリを探しています。私はすでにExpect4JとGaynmedを試してみましたが、良い文書を見つけることができませんでした。私の要件は次のとおりです。Javaからunixコマンドを実行するライブラリ

  1. 複数のコマンドを実行しています。
  2. 前のコマンドの出力をキャプチャします。
  3. アクションを実行/最後のコマンドの出力に基づいて別のコマンドを実行します。

何か指摘します。

答えて

6

あなたが言及したライブラリの名前を見ると、は、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); 
} 
+0

答えをありがとう。私はsshxcuteを試していませんが、1つのセッションで複数のコマンドを実行できるようにするか、すべてのコマンドの後にセッションを閉じる必要がありますか? – Vivek

+0

1つのセッションで複数のコマンドを実行できます。 Googleコードページを確認してください。それはすべての詳細を持っています。一番下のコードは、1つのセッションで2つのコマンドct1とct2を実行します。 –

3

Java標準ライブラリのProcessBuilderクラスは、プロセスの作成と出力の読み取りをサポートしています。必要な作業を行うためにビルドすることができなければなりません。標準ライブラリに入っていれば、かなり良い文書があります。

+0

それは、彼が求めているものではありません。彼はsshを使ってリモートサーバ上でコマンドを実行したいと思っています。私の答えをチェックしてください。 –

+0

@Michael答えをありがとう。私はProcessBuilderを試していませんが、1つのセッションで複数のコマンドを実行できるようにするか、すべてのコマンドの後にセッションを閉じる必要がありますか? – Vivek

+0

@ user473768 'ProcessBuilder'は実際には「セッション」を持っていませんが、複数のプロセスに対して同じ' ProcessBuilder'インスタンスを再利用できるはずです。 –

0

あなたが行っていることに応じて、ANTは良い方法です。 antスクリプトを作成すると、そのスクリプトをjava内から実行できます。 Antは他の環境でもよりよくサポートされます

2

ProcessBuilderはあなたのニーズには不十分ですか?あなたは確かに出力ストリームをつかんで、最後のコマンドの終了値を得ることができます。これは、正規表現によって#3を実行するのに十分です。 #1では分かりません。しかし、生のProcessBuilderで必要なことをすることは、かなり軽量な解決策であるように思えます。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

+0

答えをありがとう。私はProcessBuilderを試していませんが、1つのセッションで複数のコマンドを実行できるようにするか、すべてのコマンドの後にセッションを閉じる必要がありますか? – Vivek

2

あなたはJavaのビルトインProcessクラスを検討したことがありますか?コマンドの終了値を取得し、シェルの出力を取得することができます。

1

exec()メソッドの使用に問題がありますか?

あなたは次のようにして、このコマンドの出力から読み取ることができます
Process p = Runtime.getRuntime().exec("ls -l"); 

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
1

あなたのコマンドはシンプルかつインタラクティブでない場合は、プレーン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?

関連する問題