1

オプションとともに IPython を使用すると-wthread、Python サブプロセスが生成され、Mac OS X アプリケーションとして表示されます。

私の問題は、そのアプリケーションにコマンドを送信すると (たとえば、 でプロットするmatplotlib)、ウィンドウが他のすべてのウィンドウの背後で更新されることです。このpythonウィンドウを前面に切り替えるためにpythonコマンドを呼び出せるようにしたいと思います(⌘-tabを使用して手動で行いますが、最初にpythonアプリケーションを見つける必要があり、いくつかある可能性があります)。

IPython が生成したアプリケーションを検出する Python スクリプトはありますか? OS X で自動的に切り替える方法はありますか?

(私は OS X での問題を述べていますが、問題は他のシステムでも同様であるはずです)。

編集:これを2つの問題に分けてみましょう:

  1. pythonが実行されているMac OS Xアプリケーションを知る方法は? (おそらく、いくつかの IPython 魔法使いで可能です)
  2. そのアプリケーションに焦点を当てるように Mac OS X に指示するには? (アップルスクリプトを使っているかもしれません)
4

2 に答える 2

1

これが、IPythonマジック関数を使用した完全なソリューションです。

appscriptをインストールし(OS Xでのプログラムによるアプリの切り替えに関するこの質問を参照) activate.py、フォルダーで呼び出されるスクリプトに次のコードを配置し~/.ipythonます。

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、対応するPythonアプリケーションに切り替えることができます。

activate() (別のプロセスでappscriptの呼び出しを実行しなければならない理由は、私にはわかりません。スレッドの問題に関係している可能性があります...説明はありがたいです)

于 2010-02-19T15:54:19.047 に答える
1

次のいずれかです。

  1. 別のスクリプトの孫プロセスを追跡する新しい python スクリプトを作成するのは難しいかもしれません。IPython のドキュメントには、生成されたプロセスを pid で監視する例があります。ジョブコントロール。JobControl はプロセスを強制終了するだけですが、ウィンドウのフォーカスを変更するコマンドを追加するのはかなり簡単だと思います。

  2. 私が読んだことから、Tk gui は Mac でウィンドウ フォーカスを適切に設定しません。「matplotlib」またはその他の方法で Tk gui を使用している場合、これが問題である可能性があります。-ソース-

私は OS X にあまり詳しくないので、OS X で実行するか、状況を明確にするか、私があまりにもかけ離れている場合はお知らせください。

于 2010-02-14T12:27:14.640 に答える