Fedora and Python 2
Fedora and Python 2
Posted Apr 12, 2018 1:12 UTC (Thu) by mjblenner (subscriber, #53463)In reply to: Fedora and Python 2 by togga
Parent article: Fedora and Python 2
OK. I kind of get where you're coming from. Although I'm a bit confused. Or you're a bit confused.
ctypes is an ABI interface, so having the structure field be a different name to the function symbol is of no relevance for using python to glue various other C functions together (even when passing that structure around).
i.e. here:
> type('iface', (ctypes.Structure,), {'_fields_': [(b'c_string_symbol', ...
Anyway, the easy answer is to just use python strings there. ctypes function symbol lookup converts strings to utf-8, so 99%+ of the time, this will work.
Otherwise...
Decode the symbol name to a string with errors='surrogateescape' for use in python, and use the same error handler to decode back to the original bytes for getting the symbol out of the library.
Or you could add a layer of indirection between the structure field names and the function symbols.
Posted Apr 12, 2018 16:36 UTC (Thu)
by togga (guest, #53103)
[Link]
I'm not confused, I'm just experienced lots of issues I didn't have before Python3's software castle in the air.
> "the easy answer is to just use python strings"
Isn't this kind of bloated. These strings can come from anywhere and might not even be visible in Python code at all.
> "Decode the symbol name to a string with errors='surrogateescape' for use in python, and use the same error handler to decode back to the original bytes for getting the symbol out of the library."
You mean use Python3 and stick with tons of workarounds and issues just for it's sake? Change the whole world to Python3? I value my time much more than that.
Fedora and Python 2
> "Or you could add a layer of indirection between the structure field names and the function symbols."