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 ""