操作
機能 #4498
完了モジュール探索時に、指定したパス以下のディレクトリに存在するファイルを探索するようにする
開始日:
2018/03/26
期日:
進捗率:
100%
予定工数:
説明
manager.modules.load_pathを以下のように指定した場合、Components以下のファイルを全て調べるようにする。
manager.modules.load_path: C:\\Program Files (x86)\\OpenRTM-aist\\1.2.0\\Components\\
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 ""
操作