SQLite по умолчанию создает файл журнала в начале транзакции, что хорошо. Обычно он удаляет файл при коммите.
Вы можете изменить это поведение, просто обрезая файл (не нужно создавать / удалять) или обнуляя его, с помощью команды PRAGMA sql. Не все опции могут поддерживаться в вашей версии SQLite.
PRAGMA journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | OFF
Операции записи обычно не завершаются до тех пор, пока вы не совершите COMMIT, что реализуется путем усечения, удаления или аннулирования журнала.
Если это новое поведение, у меня нет объяснения, почему оно могло измениться, за исключением обновления SQLite, которое изменило поведение по умолчанию или стало более изощренным, если не открывать журнал для каждой транзакции.
Ваша проблема в том, что у вас нет цикла событий. Если вы хотите сделать это как отдельный скрипт, вам нужно придумать, как его создать. Шаблоны PyObjC XCode автоматически настраивают это для вас с помощью:
from PyObjCTools import AppHelper
AppHelper.runEventLoop()
Однако попытка вставить это в начало вашего скрипта показывает, что что-то внутри AppHelper
(вероятно, NSApplicationMain
) ожидает файл .plist, из которого нужно извлечь основной класс. Вы можете получить это, создав файл setup.py
и используя py2app
, что-то вроде этого примера из выступления PyObjc :
from distutils.core import setup
import py2app
plist = dict(
NSPrincipalClass='SillyBalls',
)
setup(
plugin=['SillyBalls.py'],
data_files=['English.lproj'],
options=dict(py2app=dict(
extension='.saver',
plist=plist,
)),
)
Вам стоит попробовать библиотеку camiface motmot от Эндрю Стро. Он также работает с камерами FireWire, но он также работает с isight, который вам нужен.
Из руководства:
import motmot.cam_iface.cam_iface_ctypes as cam_iface
import numpy as np
mode_num = 0
device_num = 0
num_buffers = 32
cam = cam_iface.Camera(device_num,num_buffers,mode_num)
cam.start_camera()
frame = np.asarray(cam.grab_next_frame_blocking())
print 'grabbed frame with shape %s'%(frame.shape,)