プロジェクト

全般

プロフィール

機能 #4498

モジュール探索時に、指定したパス以下のディレクトリに存在するファイルを探索するようにする

n-miyamoto約6年前に追加. 5年以上前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
-
開始日:
2018/03/26
期日:
進捗率:

100%

予定工数:

説明

manager.modules.load_pathを以下のように指定した場合、Components以下のファイルを全て調べるようにする。

manager.modules.load_path: C:\\Program Files (x86)\\OpenRTM-aist\\1.2.0\\Components\\

履歴

#1 n-miyamoto約6年前に更新

  • ステータス担当 から 解決 に変更
  • 進捗率0 から 100 に変更

StringUtil.pyに新たにgetFileList関数とfindFile関数を定義した。

findFile関数は指定ディレクトリ(dir)から、指定ファイル名(filename)と名前が一致するファイルパスを全て取得し、リスト(filelist)に格納する。

def findFile(dir, filename, filelist):
    dirs = glob.glob(os.path.join(dir,"*"))
    for d in dirs:
        if os.path.isdir(d):
            findFile(d, filename, filelist)
    files = glob.glob(os.path.join(dir,filename))
    for f in files:
        if os.path.isfile(d):
            filelist.append(f)

getFileList関数は指定ディレクトリ(dir)から指定拡張子(ext)のファイルパスを全て取得し、リスト(filelist)に格納する。

def getFileList(dir, ext, filelist):
    dirs = glob.glob(os.path.join(dir,"*"))
    for d in dirs:
        if os.path.isdir(d):
            getFileList(d, ext, filelist)
    files = glob.glob(os.path.join(dir,"*."+ext))
    for f in files:
        if os.path.isfile(d):
            filelist.append(f)

ModuleManagerのgetModuleList関数でロード可能なモジュール一覧を取得する際は、getFileList関数により指定拡張子に一致する全てのファイルパスを取得する。

    for path in paths:
      if not path:
        self._rtcout.RTC_WARN("Given load path is empty")
        continue
      self._rtcout.RTC_DEBUG("Module load path: %s", path)
      flist = []
      for suffix in suffixes:
        tmp = [suffix]
        OpenRTM_aist.eraseHeadBlank(tmp)
        suffix = tmp[0]

        tmp = []
        OpenRTM_aist.getFileList(path,suffix,tmp)

        self._rtcout.RTC_DEBUG("File list (path:%s, ext:%s): %s", (path,suffix,OpenRTM_aist.flatten(suffixes)))
        flist.extend(tmp)

ModuleManagerのfindFile関数でモジュールの検索をする際は、指定ディレクトリ直下にファイルが存在するかを確認した後、下の階層のディレクトリを探索する。

  def findFile(self, fname, load_path):
    file_name = fname
    for path in load_path:
      suffix = self._properties.getProperty("manager.modules.Python.suffixes")
      if fname.find("."+suffix) == -1:
        f = str(path) + os.sep + str(file_name)+"."+suffix
      else:
        f = str(path)+ os.sep + str(file_name)
      if self.fileExist(f):
        f = f.replace("\\","/")
        f = f.replace("//","/")
        return f
      filelist = []
      OpenRTM_aist.findFile(path,file_name,filelist)

      if len(filelist) > 0:
        return filelist[0]
    return "" 

#2 n-miyamoto5年以上前に更新

  • ステータス解決 から 終了 に変更

他の形式にエクスポート: Atom PDF