0

したがって、基本的に、コマンド「/dir/command -arg」を実行して、Java で USB デバイスの LED の色を変更しようとしています。Ubuntu 10.04 を使用しています。ターミナルからコマンドを実行すると、問題なく動作します。

ただし、見つけることができる Runtime.exec() のすべての反復を試しましたが、どれも機能していないようです。次に、次の内容のスクリプトを作成しました。

#!/bin/bash
echo "hello"
/dir/command -arg

これを端末から実行すると、問題なく動作します。しかし、私が走るとき

@Override
public void run() {
    String[] lookupCmd = {"/bin/sh","-c", "sh /dir/script.sh"};
    try {
      Runtime runtime = Runtime.getRuntime();
      Process lookupProc = runtime.exec(lookupCmd);
      lookupProc.waitFor();
      BufferedReader reader = new BufferedReader(new InputStreamReader(lookupProc.getInputStream()));
      String line = reader.readLine();        
      while (line != null) {
        id.add(line);
        System.out.println(line);
        line = reader.readLine();
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }

「こんにちは」と表示されますが、他には何もありません。エラーはありません。

私の他のコマンドは何も出力しないはずですが、単に LED の色を変更するだけです。ただし、同じコマンドで出力を生成する別の引数を使用して実行すると、「hello」のみが出力されます。

また、ユーザーが USB デバイスを使用して /dev フォルダーへのアクセス許可を持っていることも確認しました。

4

1 に答える 1

0

エラーストリームを実行していなかったので、それを追加しました。

その後、環境変数が欠落していることに気付いたので、次のように追加しました。

String[] envar = {"VAR=path"}

と呼ばれる:

runtime.exec(lookupCmd, envar);

今はうまくいきます。

于 2012-08-15T15:28:36.307 に答える