I'm trying to figure out what the difference is to two cases of using ElementTree.parse. In one case it crashes, but not in the other.
Case one FreeCAD; Inside FreeCAD's python console I have the following:
Python 3.6.10 (default, Jan 16 2020, 09:12:04) [GCC] on linux
Type 'help', 'copyright', 'credits' or 'license' for more information.
>>> import sys
>>> sys.path
['/usr/lib64/FreeCAD/Mod/Web', '/usr/lib64/FreeCAD/Mod/Tux', '/usr/lib64/FreeCAD/Mod/Test', '/usr/lib64/FreeCAD/Mod/TechDraw', '/usr/lib64/FreeCAD/Mod/Surface', '/usr/lib64/FreeCAD/Mod/Start', '/usr/lib64/FreeCAD/Mod/Spreadsheet', '/usr/lib64/FreeCAD/Mod/Sketcher', '/usr/lib64/FreeCAD/Mod/Show', '/usr/lib64/FreeCAD/Mod/Ship', '/usr/lib64/FreeCAD/Mod/Robot', '/usr/lib64/FreeCAD/Mod/ReverseEngineering', '/usr/lib64/FreeCAD/Mod/Raytracing', '/usr/lib64/FreeCAD/Mod/Points', '/usr/lib64/FreeCAD/Mod/Plot', '/usr/lib64/FreeCAD/Mod/Path', '/usr/lib64/FreeCAD/Mod/PartDesign', '/usr/lib64/FreeCAD/Mod/Part', '/usr/lib64/FreeCAD/Mod/OpenSCAD', '/usr/lib64/FreeCAD/Mod/MeshPart', '/usr/lib64/FreeCAD/Mod/Mesh', '/usr/lib64/FreeCAD/Mod/Measure', '/usr/lib64/FreeCAD/Mod/Material', '/usr/lib64/FreeCAD/Mod/Inspection', '/usr/lib64/FreeCAD/Mod/Import', '/usr/lib64/FreeCAD/Mod/Image', '/usr/lib64/FreeCAD/Mod/Idf', '/usr/lib64/FreeCAD/Mod/Fem', '/usr/lib64/FreeCAD/Mod/Drawing', '/usr/lib64/FreeCAD/Mod/Draft', '/usr/lib64/FreeCAD/Mod/Complete', '/usr/lib64/FreeCAD/Mod/Arch', '/usr/lib64/FreeCAD/Mod/AddonManager', '/usr/lib64/FreeCAD/Mod', '/usr/lib64/FreeCAD/lib64', '/usr/lib64/FreeCAD/lib', '/usr/lib64/FreeCAD/Ext', '', '/usr/lib/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/usr/lib64/python3.6/site-packages', '/usr/lib64/python3.6/site-packages/PIL', '/usr/lib64/python3.6/_import_failed', '/usr/lib/python3.6/site-packages', '', '/usr/lib64/FreeCAD/Macro']
>>> import xml.etree.ElementTree as ElementTree
>>> tree=ElementTree.parse("/usr/lib64/FreeCAD/Mod/Material/MatPropDict.xml")
In this case, parsing the file cause FreeCAD to crash.
Case two standalone; In a standalone python console I have the following:
Python 3.6.10 (default, Jan 16 2020, 09:12:04) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append('/usr/lib64/FreeCAD/lib')
>>> import FreeCAD
FreeCAD 0.18, Libs: 0.18RUnknown
>>> sys.path
['/usr/lib64/FreeCAD/Mod/Web', '/usr/lib64/FreeCAD/Mod/Tux', '/usr/lib64/FreeCAD/Mod/Test', '/usr/lib64/FreeCAD/Mod/TechDraw', '/usr/lib64/FreeCAD/Mod/Surface', '/usr/lib64/FreeCAD/Mod/Start', '/usr/lib64/FreeCAD/Mod/Spreadsheet', '/usr/lib64/FreeCAD/Mod/Sketcher', '/usr/lib64/FreeCAD/Mod/Show', '/usr/lib64/FreeCAD/Mod/Ship', '/usr/lib64/FreeCAD/Mod/Robot', '/usr/lib64/FreeCAD/Mod/ReverseEngineering', '/usr/lib64/FreeCAD/Mod/Raytracing', '/usr/lib64/FreeCAD/Mod/Points', '/usr/lib64/FreeCAD/Mod/Plot', '/usr/lib64/FreeCAD/Mod/Path', '/usr/lib64/FreeCAD/Mod/PartDesign', '/usr/lib64/FreeCAD/Mod/Part', '/usr/lib64/FreeCAD/Mod/OpenSCAD', '/usr/lib64/FreeCAD/Mod/MeshPart', '/usr/lib64/FreeCAD/Mod/Mesh', '/usr/lib64/FreeCAD/Mod/Measure', '/usr/lib64/FreeCAD/Mod/Material', '/usr/lib64/FreeCAD/Mod/Inspection', '/usr/lib64/FreeCAD/Mod/Import', '/usr/lib64/FreeCAD/Mod/Image', '/usr/lib64/FreeCAD/Mod/Idf', '/usr/lib64/FreeCAD/Mod/Fem', '/usr/lib64/FreeCAD/Mod/Drawing', '/usr/lib64/FreeCAD/Mod/Draft', '/usr/lib64/FreeCAD/Mod/Complete', '/usr/lib64/FreeCAD/Mod/Arch', '/usr/lib64/FreeCAD/Mod/AddonManager', '/usr/lib64/FreeCAD/Mod', '/usr/lib64/FreeCAD/lib64', '/usr/lib64/FreeCAD/lib', '/usr/lib64/FreeCAD/Ext', '', '/usr/lib/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/usr/lib64/python3.6/site-packages', '/usr/lib64/python3.6/site-packages/PIL', '/usr/lib64/python3.6/_import_failed', '/usr/lib/python3.6/site-packages', '/usr/lib64/FreeCAD/lib', '', '/usr/lib64/FreeCAD/Macro']
>>> import xml.etree.ElementTree as ElementTree
>>> tree=ElementTree.parse("/usr/lib64/FreeCAD/Mod/Material/MatPropDict.xml")
>>>
In this case there seems to be no issue.
Is there some setting or initilization that xml.etree depends on that could cause this difference?
The crash also occurs with the following minimalistic XML
<?xml version="1.0" encoding="UTF-8"?>
<MatPropDict>
<Group Name="User defined">
</Group>
</MatPropDict>
Edit:
I found the following difference
from xml.parsers import expat
expat.EXPAT_VERSION
in FreeCAD gives
'expat_2.0.1',
while in console gives
'expat_2.2.5'
However I can't understand where the difference comes from. In both cases, ldd
on /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so
, (using subprocess.Popen
) list the same libraries.
Thanks Torben