I’m trying to build a p3d (and maybe later an exe/binary/installer) that can read a configuration file from the same place where that p3d file is located.
My code looks like this:
from panda3d.core import loadPrcFileData
from direct.showbase.AppRunnerGlobal import appRunner
if appRunner:
path=appRunner.p3dFilename.getDirname+'/config.cfg'
else: #for testing
path='config.cfg'
try:
f = open(path, 'r')
for line in f:
if not line.startswith('#'):
loadPrcFileData('',line)
except IOError:
print "No config file!"
But this won’t work. My p3dsession.log says:
:AppRunner: Total Panda3D disk space used: 162 MB
:AppRunner: Configured max usage is: 2048 MB
Traceback (most recent call last):
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\showbase\Messenger.py", line 424, in __taskChainDispatch
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\showbase\Messenger.py", line 482, in __dispatch
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\p3d\AppRunner.py", line 748, in __startIfReady
File "VFSImporter", line 153, in load_module
File "D:\cave_demo\main.py", line 6, in <module>
path=appRunner.p3dFilename.getDirname+'/config.cfg'
TypeError: unsupported operand type(s) for +: 'builtin_function_or_method' and 'str'
:task(error): Exception occurred in PythonTask Messenger-default
Traceback (most recent call last):
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\p3d\AppRunner.py", line 638, in run
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\task\Task.py", line 502, in run
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\task\Task.py", line 460, in step
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\showbase\Messenger.py", line 424, in __taskChainDispatch
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\showbase\Messenger.py", line 482, in __dispatch
File "C:\buildslave\release_rtdist_win32\build\panda3d\built_cmu\direct\p3d\AppRunner.py", line 748, in __startIfReady
File "VFSImporter", line 153, in load_module
File "D:\cave_demo\main.py", line 6, in <module>
path=appRunner.p3dFilename.getDirname+'/config.cfg'
TypeError: unsupported operand type(s) for +: 'builtin_function_or_method' and 'str'
Failure on startup.
I’m kind of puzzled by that. getDirname() should return ‘str’ and not ‘builtin_function_or_method’, no?
Any ideas what’s the proper way to do it?