Ubuntu Linux / Gnomeでは、Pythonのwnckバインディングを使用して、開いているすべてのウィンドウのリストを取得しようとしています。
私のコードは次のようになります。
#! /usr/bin/python
from pprint import pprint
import wnck
screen = wnck.screen_get_default()
pprint(screen.get_windows())
import pdb ; pdb.set_trace()
pprint(screen.get_windows())
出力は次のようになります。
** (windowlist.py:4501): WARNING **: Trying to register gtype 'WnckWindowState' as enum when in fact it is of type 'GFlags'
** (windowlist.py:4501): WARNING **: Trying to register gtype 'WnckWindowActions' as enum when in fact it is of type 'GFlags'
** (windowlist.py:4501): WARNING **: Trying to register gtype 'WnckWindowMoveResizeMask' as enum when in fact it is of type 'GFlags'
[]
> /home/rory/personal/diriu/windowlist.py(12)<module>()
-> pprint(screen.get_windows())
(Pdb) c
[<wnck.Window object at 0xb61db0cc (WnckWindow at 0x992c000)>,
<wnck.Window object at 0xb61db0f4 (WnckWindow at 0x992c0a8)>,
<wnck.Window object at 0xb61db11c (WnckWindow at 0x992c150)>,
<wnck.Window object at 0xb61db144 (WnckWindow at 0x992c1f8)>,
<wnck.Window object at 0xb61db16c (WnckWindow at 0x992c2a0)>,
<wnck.Window object at 0xb61db194 (WnckWindow at 0x992c348)>,
<wnck.Window object at 0xb61db1bc (WnckWindow at 0x992c3f0)>,
<wnck.Window object at 0xb61db1e4 (WnckWindow at 0x992c498)>,
<wnck.Window object at 0xb61db20c (WnckWindow at 0x992c540)>,
<wnck.Window object at 0xb61db234 (WnckWindow at 0x992c5e8)>,
<wnck.Window object at 0xb61db25c (WnckWindow at 0x992c690)>,
<wnck.Window object at 0xb61db284 (WnckWindow at 0x992c738)>]
最初のget_windows()
呼び出しは[]
、空のリストを返します。2番目のget_windows()
呼び出しは、開いているウィンドウのリストを返します。ではpdb
、を押しc
て続行し、何もしません(pdbで)。
コメントアウトするpdb
と、両方のget_windows()
呼び出しが戻り[]
ます。get_windows()
pdbの前に何度も呼び出しを繰り返すと、何もありません。get_windows()
pdbの後で何度も呼び出しを繰り返すと、完全なリストが継続的に表示されます。
この呼び出しが空のpdbの後でのみ機能するのはなぜですか?pdbなしで動作させるにはどうすればよいですか?