python xml .etree условный cra sh (FreeCAD / console) - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь выяснить, в чем разница с двумя случаями использования ElementTree.parse. В одном случае происходит сбой, но не в другом.

Случай один FreeCAD; Внутри консоли python FreeCAD у меня есть следующее:

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

В этом случае при синтаксическом анализе файла FreeCAD создает sh.

Случай два автономен; В автономной консоли python у меня есть следующее:

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

В этом случае, похоже, нет проблем.

Существуют ли какие-либо настройки или инициализации, которые зависят от xml .etree на что может быть вызвано это различие?

Cra sh также происходит со следующим минимализмом c XML

<?xml version="1.0" encoding="UTF-8"?>
<MatPropDict>
    <Group Name="User defined">
    </Group>
</MatPropDict>

Редактировать:

Я нашел следующая разница

from xml.parsers import expat
expat.EXPAT_VERSION

во FreeCAD дает
'expat_2.0.1',

, а в консоли дает
'expat_2.2.5'

Однако я могу не понимаю, откуда разница. В обоих случаях ldd на /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so, (с использованием subprocess.Popen) перечисляются одни и те же библиотеки.

Спасибо Torben

...