OpenRTM / OpenRTP-aist

OpenRTP-aist: RT-Middleware and OMG RTC based component and system development tools implemented by AIST
Other
1 stars 6 forks source link

[6-2]①Mac版ネームサービスコマンド認識機能の修正 #517

Closed n-ando closed 6 months ago

n-ando commented 9 months ago

Is your feature request related to a problem? Please describe. 現在、RTSEのネームサービスビュー内に、ネームサーバ起動ボタンがあり、特定のパス上に当該コマンド rtm-naming や rtm2-naming がある場合、これを実行するようになっている。Mac環境(M1, M2) においてコマンドを探すパスが /opt/homebrew 等の場合にはコマンドを探せずにボタンが機能しない。

Describe the solution you'd like まず、デフォルトで、/opt/homebrew/bin 等をコマンドサーチパスに含めるとともに、ユーザの環境変数PATHに設定されているパスをコマンドサーチパスに含める、また、whichコマンドの出力を参考にコマンドを探す、設定画面でコマンドの場所を指定できるようにする、などの対策を行う。

Describe alternatives you've considered 特になし。

Additional context mac, Linux, Windowsいずれの環境でも、rtm2-namingコマンドがインストールされていれば、ボタンが機能するようにすることとする。

n-ando commented 7 months ago

Java言語で、whichコマンドでrtm-naming2というコマンドのフルパスを探してそれに基づいてコマンドを呼び出すプログラムを書いてください。

ChatGPT whichコマンドをJavaで実行するには、Runtime.getRuntime().exec()メソッドを使用します。ただし、whichコマンドは通常Unix系のシステムで利用されるものであり、Windowsでは使えません。以下は、Unix系のシステムでwhichコマンドを使用してrtm-naming2のフルパスを取得し、それを基にコマンドを呼び出すJavaプログラムの例です。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class WhichCommandExample {

    public static void main(String[] args) {
        try {
            // コマンドを実行してrtm-naming2のフルパスを取得
            String command = "which rtm-naming2";
            Process process = Runtime.getRuntime().exec(command);

            // コマンドの実行結果を読み取り
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String fullPath = reader.readLine();

            if (fullPath != null) {
                // rtm-naming2が見つかった場合は、コマンドを実行
                System.out.println("rtm-naming2のフルパス: " + fullPath);

                // rtm-naming2を実行する例
                String rtmNamingCommand = fullPath + " <追加の引数>";
                Process rtmNamingProcess = Runtime.getRuntime().exec(rtmNamingCommand);

                // 必要に応じて、rtmNamingProcessからの出力を読み取るなどの処理を追加
            } else {
                System.out.println("rtm-naming2が見つかりませんでした。");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
n-ando commented 7 months ago

環境変数PATHからrtm-naming2の場所を探してそのコマンドを実行する方法を教えてください。

ChatGPT PATHから実行可能なコマンドの場所を検索して実行するJavaプログラムを作成するには、以下のようなコードを使用できます。このコードはUnix系のシステムに対応しています。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ExecuteCommandFromPath {

    public static void main(String[] args) {
        String commandName = "rtm-naming2";

        try {
            // 環境変数PATHからコマンドの場所を検索
            String pathCommand = "which " + commandName;
            Process pathProcess = Runtime.getRuntime().exec(pathCommand);

            // 検索結果を取得
            BufferedReader reader = new BufferedReader(new InputStreamReader(pathProcess.getInputStream()));
            String commandPath = reader.readLine();

            if (commandPath != null) {
                // コマンドが見つかった場合は実行
                System.out.println(commandName + "の場所: " + commandPath);

                // コマンドを実行する例
                String fullCommand = commandPath + " <追加の引数>";
                Process commandProcess = Runtime.getRuntime().exec(fullCommand);

                // 必要に応じて、commandProcessからの出力を読み取るなどの処理を追加
            } else {
                System.out.println(commandName + "が見つかりませんでした。");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}