2012-01-11 6 views
3

PyObjC、Mac OS X 10.7、およびデフォルトのPython 2.7を使用して、現在使用可能なウィンドウにウィンドウハンドルを取得しようとしています。しかし、次の2行ではPythonがすぐにクラッシュします。何がありますか?Segfaultは単純な2行のNSCountWindowsコールですか?

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) 
+0

私はPyObjCは10.7で動作するようになったことはありません私たちができるなら、私は非常に興味それを引き起こしていることを理解して、私はそれに飛び込む多くの時間がなかった。 – lukecampbell

+0

これまでのところ、単純なNSApp()内のコールバックとしてカプセル化されたCocoaウィンドウで動作するPythonコードを実行するアプローチを変更しました。run() - PyObjCコード全体を実行することができるかどうかはまだ不思議ですNSAppのガモット。 :P –

答えて

2

Appleのフレームワークは、特にApplicationオブジェクトを設定せずに好きではありません。対応するCコードもクラッシュ:

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

int main(void) 
{ 
    long windows; 

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

を最も簡単な回避策は、APIを呼び出す前に、NSApplicationのオブジェクトを作成することです:

import AppKit 

AppKit.NSApplication.sharedApplication() 
print AppKit.NSCountWindows(None) 
関連する問題