2011-04-05 15 views
5

比方說,我跑:開始在Python的過程和檢索它的窗口ID

import subprocess; 
P = subprocess.Popen(['gnome-terminal'); 

我再拿到類Popen的對象P

<subprocess.Popen object at 0xb72a9d0c> 

我怎樣才能然後檢索window identity這個子進程的?

最後,我想操縱利用wmctrl子進程催生了窗口的幾何特性,但爲了這個,我需要的東西稱爲窗口的windows identity(見wmctrl文檔)

提供更多上下文,wmctrl -l輸出在GNOME桌面上運行的窗口列表,其中第一列顯示每個窗口的window identity。這是一個十六進制數字,我注意到不同於與上面Popen報告的輸出中包含的數字不同。

我檢查了Popen documentation,但我不知道如何從這一點開始。

有什麼想法?謝謝!

回答

4

獲取窗口ID的簡單方法是使用wmctrl -lp,它將包含進程的PID。找到與您的子流程中的Popen.pid相匹配的那個,您將找到該流程的窗口標識。

+0

'wmctrl -lp'返回一個窗口列表及其'PIDs',但其中幾個窗口(終端,如上例所示)列在相同的'PID'下。 如何判斷哪一個是哪個? 「Popen」對象是否擁有任何其他標識符,這些標識符可以讓我明確地識別這個過程? – 2011-04-05 21:29:29

+0

@AmV:如果gnome-terminal在同一個PID下運行其所有實例,則可能根本無法使用此方法。命令行列是否有用? – nmichaels 2011-04-05 21:56:53