2010-02-14 69 views
1

當我使用IPython和-wthread選項時,它會產生一個python子進程,該子進程顯示爲Mac OS X應用程序。如何切換到由IPython創建的Python子進程(在OS X上)?

我的問題是,當我向該應用程序發送命令(例如使用matplotlib繪圖)時,該窗口會在我所有其他窗口後面更新。我想能夠調用一個python命令來將這個python窗口切換到前面(我使用⌘-tab手動執行該操作,但是我必須先找到python應用程序,並且可能會有幾個)。

是否有python腳本來檢測IPython產生的應用程序,以及如何在OS X中自動切換到它?

(我在OS X中指出了這個問題,但這個問題在其他系統上應該是相似的)。

編輯:讓我在兩個問題打破下來:

  1. 如何知道的Mac OS X應用程序,Python,在運行? (可能與一些IPython witchery)
  2. 如何告訴Mac OS X將重點放在該應用程序? (也許使用AppleScript)

回答

1

這是我的完整解決方案,帶有IPython魔術功能。

安裝appscript(見this question關於OS X程序切換應用程序),並把下面的代碼在你的~/.ipython文件夾,名爲activate.py腳本。

import appscript 
import sys 
appscript.app(pid=int(sys.argv[1])).activate() 

現在,編輯您的~/.ipython/ipy_user_conf.py配置文件,並定義了神奇的功能:

def wxactivate(self, arg): 
    import wx 
    pid = wx.GetProcessId() 
    ip = self.api 
    import os 
    here = os.path.dirname(__file__) 
    import subprocess 
    subprocess.Popen([os.path.join(here, 'activate.py'), str(pid)]) 

現在你只需要通過將以下的地方在相同的配置文件來註冊這個神奇的IPython的功能:

ip.expose_magic('wxactivate', wxactivate) 

現在,運行IPython -wthread後,您可以撥打%wxactivate,您將切換到t他對應Python應用程序!

(注意,爲什麼一個具有運行呼叫的原因在我不清楚appscript的activate()在另一個進程;它可能有一些線程問題......任何的解釋會被appreciatated做)

1

可能是因爲存在:

  • 製作跟蹤另一個腳本的孫子進程可能是棘手的一個新的Python腳本。 IPython文檔有一個例子來監視派生的進程; JobControl。 JobControl只會殺死進程,但我想添加一個命令來改變窗口焦點相當容易。

  • 從我讀過的內容來看,Tk gui沒有正確設置窗口焦點在mac上。如果你的'matplotlib'或其他使用Tk gui,這可能是問題。 - source -

  • 我不是很熟悉的OS X,所以無論是與那些運行,說明你的情況還是讓我知道,如果我太遙遠。

    +0

    關於Tk的有趣鏈接!我使用wxPython,它不應該遭受這個問題。 我的問題分爲兩部分: 1)如何知道python運行在哪個應用程序? (可能與一些IPython witchery) 2)如何告訴Mac OS X把焦點放在那個應用程序上? (也許使用applescript;我可以弄清楚) – 2010-02-15 09:05:14