Question

Quand j'utilise IPython avec l'option -wthread, il génère un sous-python, qui apparaît comme une application Mac OS X.

Mon problème est que lorsque j'envoie des commandes à cette application (par exemple comploter avec matplotlib), la fenêtre est mis à jour derrière toutes mes autres fenêtres. Je voudrais pouvoir appeler une commande python pour changer cette fenêtre python à l'avant (je faire manuellement avec ⌘-onglet, mais je dois trouver l'application python premier, et il pourrait y avoir plusieurs plus).

Y at-il un script python pour détecter quelle application IPython a donné naissance, et comment puis passer automatiquement dans OS X?

(je poser le problème sous Mac OS X, mais la question devrait être similaire sur d'autres systèmes).

Edit: permettez-moi de le décomposer en deux problèmes:

  1. comment savoir quel python application Mac OS X est en cours d'exécution en? (Probablement possible avec certains witchery IPython)
  2. comment dire Mac OS X pour mettre l'accent sur cette application? (Peut-être en utilisant AppleScript)
Était-ce utile?

La solution 2

Voici ma solution complète, avec une fonction magique IPython.

Installer appscript (voir this question sur la commutation des applications par programme dans OS X), et mettre le code suivant dans un script appelé activate.py dans votre dossier ~/.ipython.

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

Maintenant, modifiez votre fichier de configuration ~/.ipython/ipy_user_conf.py et définir la fonction magique:

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)])

Maintenant, il vous suffit d'enregistrer cette fonction magique IPython en mettant ce qui suit quelque part dans ce même fichier de configuration:

ip.expose_magic('wxactivate', wxactivate)

Maintenant, après avoir exécuté IPython -wthread, vous pouvez appeler %wxactivate et vous passer à l'application Python correspondant!

(notez que la raison pour laquelle on doit exécuter l'appel à la activate() de appscript dans un autre processus pas clair pour moi, il peut avoir à voir avec un problème de filetage ... toute explication serait appreciatated)

Autres conseils

Peut-être:

  1. Création d'un nouveau script python qui permet de suivre les processus de petits-enfants d'un autre script peut être difficile. La documentation IPython a un exemple pour surveiller les processus engendrés par pid; JobControl . JobControl ne tue que les processus, mais je suppose l'ajout d'une commande pour changer d'orientation de la fenêtre serait assez facile.

  2. D'après ce que j'ai lu, l'interface utilisateur graphique Tk n'a pas correctement mis l'accent sur la fenêtre macs. Si votre « matplotlib » ou utilise autrement l'interface utilisateur graphique Tk, cela peut être le problème. - la source -

Je ne suis pas très familier avec OS X, soit exécuter avec ceux-ci, de clarifier votre situation ou laissez-moi savoir si je suis trop loin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top