Segfault в простом 2-строчном вызове NSCountWindows? - PullRequest
3 голосов
/ 11 января 2012

Я пытаюсь получить дескрипторы окон для доступных в настоящее время окон, используя PyObjC с Mac OS X 10.7 и Python 2.7 по умолчанию. Однако следующий 2-строчный код приводит к немедленному падению Python. Что дает?

bash-3.2$ python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from AppKit import *
>>> NSCountWindows(None)
Bus error: 10
bash-3.2$

Трассировка стека потоков не сильно помогла:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_c.dylib               0x91167c19 _spin_lock$VARIANT$mp + 9
1   com.apple.CoreGraphics          0x990d0048 CGSGetOnScreenWindowCount + 87
2   com.apple.AppKit                0x9bdd13fd NSCountWindows + 61
... (Python internal calls)

1 Ответ

2 голосов
/ 23 ноября 2012

Каркасы Apple не особенно нравятся, когда вы используете их без настройки объекта Application.Соответствующий код C также дает сбой:

#import <AppKit/AppKit.h>
#include <stdio.h>

int main(void)
{
   long windows;

   NSCountWindows(&windows);
   printf("%d\n", (int)windows);
   return 0;
}

Самый простой обходной путь - создать объект NSApplication перед вызовом API:

import AppKit

AppKit.NSApplication.sharedApplication()
print AppKit.NSCountWindows(None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...