Coder Social home page Coder Social logo

Comments (26)

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024 1

Thanks for your help in testing this - there's no way I could have found it otherwise. I think version 1.8.0 is good enough for now - you won't see what the problematic logging message actually is until the next release.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

That's very odd, and I'm not able to reproduce it on my OpenSUSE system (Python 3.4.6).
What does camera.wait_for_event(1000, context) return when you're not using Python logging?
Does it also happen if you use gp.gp_camera_wait_for_event(camera, 1000, context) instead of camera.wait_for_event(1000, context)?
Can you try it with version 1.7.0 of python-gphoto2?

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

Does it also happen if you use gp.gp_camera_wait_for_event(camera, 1000, context) instead of camera.wait_for_event(1000, context)?

Yep!

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import gphoto2 as gp

In [2]: gp.use_python_logging()
Out[2]: 1

In [3]: context = gp.gp_context_new()

In [4]: camera = gp.check_result(gp.gp_camera_new())

In [5]: camera.init(context)
WARNING:gphoto2:(foreach_func [gphoto2-port-info-list.c:237]) Error during assembling of port list: 'Unspecified error' (-1).
WARNING:gphoto2:(ptp_list_folder_eos [library.c:7017]) storage 0xffffffff, but handle 0x00000000?
WARNING:gphoto2:(ptp_usb_getresp [usb.c:428]) PTP_OC 0x9109 receiving resp failed: PTP General Error (0x2002)
WARNING:gphoto2:(ptp_list_folder_eos [library.c:7033]) 'ptp_canon_eos_getobjectinfoex ( params, storageids.Storage[k], handle ? handle : 0xffffffff, 0x100000, &tmp, &nroftmp)' failed: PTP General Error (0x2002)

In [6]: gp.gp_camera_wait_for_event(camera, 1000, context)
Segmentation fault (core dumped)

When I try to debug it using ipdb, I get stuck in a loop in port_log.py:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import gphoto2 as gp

In [2]: gp.use_python_logging()
Out[2]: 1

In [3]: context = gp.gp_context_new()

In [4]: camera = gp.check_result(gp.gp_camera_new())

In [5]: camera.init(context)
(foreach_func [gphoto2-port-info-list.c:237]) Error during assembling of port list: 'Unspecified error' (-1).
(ptp_list_folder_eos [library.c:7017]) storage 0xffffffff, but handle 0x00000000?
(ptp_usb_getresp [usb.c:428]) PTP_OC 0x9109 receiving resp failed: PTP General Error (0x2002)
(ptp_list_folder_eos [library.c:7033]) 'ptp_canon_eos_getobjectinfoex ( params, storageids.Storage[k], handle ? handle : 0xffffffff, 0x100000, &tmp, &nroftmp)' failed: PTP General Error (0x2002)

In [6]: def wait_for_event(camera, context):
   ...:     import ipdb; ipdb.set_trace()
   ...:     camera.wait_for_event(1000, context)
   ...:     

In [7]: wait_for_event(camera, context)
> <ipython-input-6-b6defcd563a3>(3)wait_for_event()
      2     import ipdb; ipdb.set_trace()
----> 3     camera.wait_for_event(1000, context)
      4 

ipdb> s
--Call--
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(121)callback()
    120 
--> 121     def callback(self, level, domain, msg):
    122         self.log(self.mapping[level], '(%s) %s', domain, msg)

ipdb> n
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(122)callback()
    121     def callback(self, level, domain, msg):
--> 122         self.log(self.mapping[level], '(%s) %s', domain, msg)
    123 

ipdb> n
--Return--
None
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(122)callback()
    121     def callback(self, level, domain, msg):
--> 122         self.log(self.mapping[level], '(%s) %s', domain, msg)
    123 

ipdb> n
--Call--
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(121)callback()
    120 
--> 121     def callback(self, level, domain, msg):
    122         self.log(self.mapping[level], '(%s) %s', domain, msg)

ipdb> n
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(122)callback()
    121     def callback(self, level, domain, msg):
--> 122         self.log(self.mapping[level], '(%s) %s', domain, msg)
    123 

ipdb> n
--Return--
None
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(122)callback()
    121     def callback(self, level, domain, msg):
--> 122         self.log(self.mapping[level], '(%s) %s', domain, msg)
    123 

ipdb> n
--Call--
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(121)callback()
    120 
--> 121     def callback(self, level, domain, msg):
    122         self.log(self.mapping[level], '(%s) %s', domain, msg)

ipdb> n
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(122)callback()
    121     def callback(self, level, domain, msg):
--> 122         self.log(self.mapping[level], '(%s) %s', domain, msg)
    123 

ipdb> n
--Return--
None
> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py(122)callback()
    121     def callback(self, level, domain, msg):
--> 122         self.log(self.mapping[level], '(%s) %s', domain, msg)
    123 

ipdb> 

Yep, it still happens on gphoto2==1.7.0.

I just tried on a Raspberry Pi running the latest Raspbian and it does the same. My camera is a Canon EOS 7D if that matters.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

However, it does work on Python 2.7!

Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
Type "copyright", "credits" or "license" for more information.

IPython 5.5.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import gphoto2 as gp

In [2]: gp.use_python_logging()
Out[2]: 1

In [3]: context = gp.gp_context_new()

In [4]: camera = gp.check_result(gp.gp_camera_new())

In [5]: camera.init(context)
No handlers could be found for logger "gphoto2"

In [6]: camera.wait_for_event(1000, context)
Out[6]: [0, 'PTP Property d105 changed']

In [7]: 

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

OK, I'm guessing that attempting to log a message to Python is generating a fault that then gets logged to Python...
Python 3.5 is different from Python 3.4, which was causing problems with SWIG's -builtin option. Can you try installing 1.7.1 with an environment variable PYTHON_GPHOTO2_NO_BUILTIN=1.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

No dice.

(flax-capture) flyte@demosthenes:~/dev/0x07/flax/upload
$ export PYTHON_GPHOTO2_NO_BUILTIN=1
(flax-capture) flyte@demosthenes:~/dev/0x07/flax/upload
$ pip install --no-cache-dir gphoto2
Collecting gphoto2
  Downloading gphoto2-1.7.1.tar.gz (6.9MB)
    100% |████████████████████████████████| 6.9MB 6.5MB/s 
Installing collected packages: gphoto2
  Running setup.py install for gphoto2 ... done
Successfully installed gphoto2-1.7.1
(flax-capture) flyte@demosthenes:~/dev/0x07/flax/upload
$ ipython
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import gphoto2 as gp

In [2]: gp.use_python_logging()
Out[2]: 1

In [3]: context = gp.gp_context_new()

In [4]: camera = gp.check_result(gp.gp_camera_new())

In [5]: camera.init(context)
(foreach_func [gphoto2-port-info-list.c:237]) Error during assembling of port list: 'Unspecified error' (-1).
(ptp_list_folder_eos [library.c:7017]) storage 0xffffffff, but handle 0x00000000?
(ptp_usb_getresp [usb.c:428]) PTP_OC 0x9109 receiving resp failed: PTP General Error (0x2002)
(ptp_list_folder_eos [library.c:7033]) 'ptp_canon_eos_getobjectinfoex ( params, storageids.Storage[k], handle ? handle : 0xffffffff, 0x100000, &tmp, &nroftmp)' failed: PTP General Error (0x2002)

In [6]: camera.wait_for_event(1000, context)
Segmentation fault (core dumped)

I ran the install again with -v to make sure it ran setup.py properly:

...
Running setup.py install for gphoto2 ...     Running command /home/flyte/.virtualenvs/flax-capture/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-qeuvk_ss/gphoto2/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-qsaqrrjl-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/flyte/.virtualenvs/flax-capture/include/site/python3.5/gphoto2
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.5
    creating build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/__init__.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/result.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/version.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/file.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/port_info_list.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/filesys.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/list.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/abilities_list.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/port_log.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/widget.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/camera.py -> build/lib.linux-x86_64-3.5/gphoto2
    copying src/swig-py3-gp2.5.0/context.py -> build/lib.linux-x86_64-3.5/gphoto2
    running build_ext
    building '_version' extension
    creating build/temp.linux-x86_64-3.5
    creating build/temp.linux-x86_64-3.5/src
    creating build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/version_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/version_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/version_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_version.cpython-35m-x86_64-linux-gnu.so
    building '_filesys' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/filesys_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/filesys_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/filesys_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_filesys.cpython-35m-x86_64-linux-gnu.so
    building '_abilities_list' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/abilities_list_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/abilities_list_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/abilities_list_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_abilities_list.cpython-35m-x86_64-linux-gnu.so
    building '_result' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/result_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/result_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/result_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_result.cpython-35m-x86_64-linux-gnu.so
    building '_port_log' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/port_log_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/port_log_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/port_log_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_port_log.cpython-35m-x86_64-linux-gnu.so
    building '_port_info_list' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/port_info_list_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/port_info_list_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/port_info_list_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_port_info_list.cpython-35m-x86_64-linux-gnu.so
    building '_file' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/file_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/file_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/file_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_file.cpython-35m-x86_64-linux-gnu.so
    building '_context' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/context_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/context_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/context_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_context.cpython-35m-x86_64-linux-gnu.so
    building '_list' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/list_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/list_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/list_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_list.cpython-35m-x86_64-linux-gnu.so
    building '_widget' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/widget_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/widget_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/widget_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_widget.cpython-35m-x86_64-linux-gnu.so
    building '_camera' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include -I/usr/include/libexif -I/usr/include/python3.5m -I/home/flyte/.virtualenvs/flax-capture/include/python3.5m -c src/swig-py3-gp2.5.0/camera_wrap.c -o build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/camera_wrap.o -O3 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-strict-prototypes -DGPHOTO2_VERSION=0x020509
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.5/src/swig-py3-gp2.5.0/camera_wrap.o -lgphoto2 -lm -lgphoto2_port -lm -lexif -o build/lib.linux-x86_64-3.5/gphoto2/_camera.cpython-35m-x86_64-linux-gnu.so
    running install_lib
    creating /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/__init__.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/result.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/version.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_camera.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_context.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/file.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/port_info_list.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/filesys.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_version.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_list.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_filesys.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_abilities_list.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_file.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/list.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/abilities_list.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_result.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/port_log.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_port_info_list.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_widget.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/widget.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/_port_log.cpython-35m-x86_64-linux-gnu.so -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/camera.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    copying build/lib.linux-x86_64-3.5/gphoto2/context.py -> /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/__init__.py to __init__.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/result.py to result.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/version.py to version.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/file.py to file.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_info_list.py to port_info_list.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/filesys.py to filesys.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/list.py to list.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/abilities_list.py to abilities_list.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/port_log.py to port_log.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/widget.py to widget.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/camera.py to camera.cpython-35.pyc
    byte-compiling /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/context.py to context.cpython-35.pyc
    running install_data
    creating /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2
    creating /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/set-camera-clock.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/list-cameras-oo.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/copy-chunks.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/camera-config-gui.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/camera-summary.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/camera-config-gui-oo.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/list-cameras.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/camera-summary-oo.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/read-exif-exifread.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/list-files-oo.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/focus-gui.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/capture-image.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/set-capture-target.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/copy-data.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/get-camera-clock.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/error_handling.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/get-capture-target.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/list-files.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/read-exif-gexiv2.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/clear-space.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/copy-files.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/choose-camera.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying examples/preview-image.py -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2/examples
    copying CHANGELOG.txt -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2
    copying LICENSE.txt -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2
    copying README.rst -> /home/flyte/.virtualenvs/flax-capture/share/python-gphoto2
    running install_egg_info
    running egg_info
    creating gphoto2.egg-info
    writing dependency_links to gphoto2.egg-info/dependency_links.txt
    writing gphoto2.egg-info/PKG-INFO
    writing top-level names to gphoto2.egg-info/top_level.txt
    writing manifest file 'gphoto2.egg-info/SOURCES.txt'
    reading manifest file 'gphoto2.egg-info/SOURCES.txt'
    writing manifest file 'gphoto2.egg-info/SOURCES.txt'
    Copying gphoto2.egg-info to /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2-1.7.1-py3.5.egg-info
    running install_scripts
    writing list of installed files to '/tmp/pip-qsaqrrjl-record/install-record.txt'
done
  Removing source in /tmp/pip-build-qeuvk_ss/gphoto2
Successfully installed gphoto2-1.7.1

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

It might be worth checking that /usr/lib64/python3.5/site-packages/gphoto2/camera.py (or wherever it's installed) is about 31,000 bytes rather than about 3,500.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024
$ ls -la ~/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/camera.py 
-rw-rw-r-- 1 flyte flyte 39234 Aug 17 14:15 /home/flyte/.virtualenvs/flax-capture/lib/python3.5/site-packages/gphoto2/camera.py

Look right?

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

Yup. So that's not the problem either. Leave it with me for a day or two.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

No worries, cheers.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

I've set up a clean Ubuntu 16.04 installation on a virtual machine and am not getting the problem with my Canon EOS 100D. Will try some other cameras.
PS Have tried it with my Canon A1100 IS and it's still fine. Enabling Python logging shows some debug output on each wait_for_event call though.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

I strongly suspect this is camera dependent. Possibly the driver for your camera is logging with unexpected parameters which the conversion to Python mishandles, but that wouldn't explain why it works with Python 2.7.
Can you try it again on 2.7 but with a logging.basicConfig() call (after importing logging) so we actually get some log output.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

I've been puzzling over this, trying to come up with a theory to explain what's happening. One possibility is that camera.init() (known to leak memory!) is trashing the Python wrapper's record of what Python function to call when a message is to be logged. camera.init() is successfully logging some messages though, so any corruption happens towards the end of its call.
Can you try calling gp.gp_log_remove_func(1) (where 1 is the value returned by gp.use_python_logging()) before calling camera.wait_for_event()?

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

Hopefully this will shed some light.. I added a print() to the code on line 160 of site-packages/gphoto2/port_log.py as such:

def callback(self, level, domain, msg):
    print("\nNew log message:\n%s" % msg)
    self.log(self.mapping[level], '(%s) %s', domain, msg)

Which creates this rather long output:

$ python crashtest.py 

... snip ...

New log message:
event 36: EOS prop d11c info record, datasize is 4

New log message:
event 36: currentvalue of d11c is 1

New log message:
event 37: EOS prop d1a0 info record, datasize is 104

New log message:
event 37: decoded custom function, currentvalue of d1a0 is 68,1,1,5c,7,101,1,0,102,1,0,103,1,1,104,1,0,105,1,0,108,1,1,10f,1,0,

New log message:
event 38: EOS prop d1a0 info record, datasize is 56

New log message:
event 38: currentvalue of d1a0 is 8

New log message:
event 38: decoded custom function, currentvalue of d1a0 is 38,1,2,2c,3,201,1,0,202,1,0,203,1,0,

New log message:
event 39: EOS prop d1a0 info record, datasize is 196
Segmentation fault (core dumped)

It's no wonder I thought that I was getting stuck in a loop!

Running gp.gp_log_remove_func(1) does stop the segfault from appearing.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

Yes, the lowest level logging is very verbose. I half expected calling gp.gp_log_remove_func(1) itself to segfault. As it didn't I think I can assume that the data I was talking about is intact.
Can you try modifying your print statement:

def callback(self, level, domain, msg):
    if level != 3:
        print("\nNew log message", level, domain, "\n", msg)
    self.log(self.mapping[level], '(%s) %s', domain, msg)

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

Even that prints rather a lot:

$ python crashtest.py 

... snip ...

New log mesage 2 ptp 
 event 42: EOS prop d11c info record, datasize is 4

New log mesage 2 ptp 
 event 42: currentvalue of d11c is 1

New log mesage 2 ptp 
 event 43: EOS prop d1a0 info record, datasize is 104

New log mesage 2 ptp 
 event 43: decoded custom function, currentvalue of d1a0 is 68,1,1,5c,7,101,1,0,102,1,0,103,1,1,104,1,0,105,1,0,108,1,1,10f,1,0,

New log mesage 2 ptp 
 event 44: EOS prop d1a0 info record, datasize is 56

New log mesage 2 ptp 
 event 44: currentvalue of d1a0 is 8

New log mesage 2 ptp 
 event 44: decoded custom function, currentvalue of d1a0 is 38,1,2,2c,3,201,1,0,202,1,0,203,1,0,

New log mesage 2 ptp 
 event 45: EOS prop d1a0 info record, datasize is 196
Segmentation fault (core dumped)

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

However, the last log message is basically the same, and there's nothing about it that would seem likely to upset the logging system. I suspect the problem is happening before the Python callback function you edited is called.
If you download python-gphoto2 from PyPI (https://pypi.python.org/pypi/gphoto2/1.7.1) you could edit the SWIG generated wrapper before installing, which might yield some useful information. The file you want to edit is src/swig-bi-py3-gp2.5.0/port_log_wrap.c (we'll go back to the -builtin version now). Find the gp_log_call_python function and add a printf statement:

  if (Py_IsInitialized()) {
    printf("log: %d %s %s\n", level, domain, str);
    PyGILState_STATE gstate = PyGILState_Ensure();

I hope you'll be able to install as follows:

python3 setup.py build
sudo python3 setup.py install

Don't bother posting all the output, just the last bit before the segfault.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

I've found one remotely possible cause of your segfault problem, and it's camera dependent. To call the Python logging function from C I use Py_BuildValue to assemble the parameters (level, domain & str) into a Python object. The documentation of Py_BuildValue says it can fail (e.g. if it runs out of memory) and I'm not currently checking for this. If the driver for your camera generates extremely verbose debug information this might be a problem.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

Commit 255f82d might be the cure.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

Apologies for the radio silence, I've picked up a contract so I'm busy with that at my client's office without the camera. Thank you for the attention you're giving this issue! I'll check out your fix one evening this week.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

No problem. I might do a new release in the next day or two which will make it easier for you to test it.

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

Release 1.8.0 has the substantially reworked logging callback stuff.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

Great, thank you. I'll endeavour to test it out over the weekend.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

Much better!

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import gphoto2 as gp

In [2]: gp.use_python_logging()
Out[2]: 1

In [3]: context = gp.gp_context_new()

In [4]: camera = gp.check_result(gp.gp_camera_new())

In [5]: camera.init(context)
(foreach_func [gphoto2-port-info-list.c:237]) Error during assembling of port list: 'Unspecified error' (-1).
(ptp_list_folder_eos [library.c:7017]) storage 0xffffffff, but handle 0x00000000?
(ptp_usb_getresp [usb.c:428]) PTP_OC 0x9109 receiving resp failed: PTP General Error (0x2002)
(ptp_list_folder_eos [library.c:7033]) 'ptp_canon_eos_getobjectinfoex ( params, storageids.Storage[k], handle ? handle : 0xffffffff, 0x100000, &tmp, &nroftmp)' failed: PTP General Error (0x2002)

In [6]: camera.wait_for_event(1000, context)
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 34: unexpected end of data
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa4 in position 34: invalid start byte
Out[6]: [0, 'PTP Property d11b changed']

from python-gphoto2.

jim-easterbrook avatar jim-easterbrook commented on July 3, 2024

Ulrika! (Sorry, was watching W1A last night.)
It appears that either the domain or str callback parameter (probably the latter) contains a non-ASCII character, and the error this causes is now being handled better. This also explains why it worked with Python 2 - all strings are byte rather than Unicode.
As there's no way of knowing what character set any particular camera uses I guess it would be safer (in Python 3) to pass bytes values instead of str and leave it to the Python callback to decide what to do.

from python-gphoto2.

flyte avatar flyte commented on July 3, 2024

from python-gphoto2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.