2009-10-12 4 views
3

Je pense que ce dont j'ai besoin ici, c'est de savoir quelle ligne de commande magique ou programme de script OSA exécuter pour démarrer une URL dans un navigateur Firefox existant, s'il est en cours d'exécution, ou pour démarrer Firefox si ce n'est pas le cas. Sur Mac.webbrowser.get ("firefox") sur un Mac avec Firefox "impossible de localiser le navigateur exécutable"

Je suis en train de tester un programme Python (Crunchy Python) qui configure un serveur web puis utilise Firefox pour le frontal. Il commence l'application Web avec les éléments suivants:

try: 
    client = webbrowser.get("firefox") 
    client.open(url) 
    return 
except: 
    try: 
     client = webbrowser.get() 
     client.open(url) 
     return 
    except: 
     print('Please open %s in Firefox.' % url) 

Je Safari sur mon Mac comme valeur par défaut, mais j'ai aussi Firefox installé et en cours d'exécution. Le code ci-dessus a démarré la nouvelle URL (sur localhost) dans Safari. Crunchy ne fonctionne pas bien dans Safari. Je veux le voir dans Firefox, puisque j'ai Firefox. Sous Python 2.5, 2.6 et 2.7 (du contrôle de version) je reçois ceci:

>>> import webbrowser 
>>> webbrowser.get("firefox") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/webbrowser.py", line 46, in get 
    raise Error("could not locate runnable browser") 
webbrowser.Error: could not locate runnable browser 

Firefox est là. J'ai essayé d'utiliser webbrowser.get ("/ Applications/Firefox.app/Contenu/MacOS/firefox% s") qui démarre une nouvelle instance de Firefox puis se plaint qu'une autre instance de Firefox est déjà en cours d'exécution. Je voudrais vraiment webbrowser pour ouvrir l'URL dans un onglet/fenêtre de Firefox, si elle est déjà en cours d'exécution, ou dans un nouveau Firefox n'est pas déjà en cours d'exécution.

J'ai regardé webbrowser.py et il semble qu'il n'y ait pas de support 'firefox' pour MacOSX. C'est bon, je peux ajouter ça. Mais je ne sais pas comment ouvrir l'URL dans Firefox comme je le souhaite.

Des idées? Et pour l'instant, je peux forcer Crunchy à me donner l'URL, que je peux coller manuellement dans Firefox.

Répondre

2

Vous devez utiliser les services de lancement pour ouvrir l'URL. Vous pouvez le faire avec le module LaunchServices, ou avec l'utilitaire d'Apple open, ou avec mon launch utilitaire (here):

open est probablement plus facile:

% open -b org.mozilla.firefox http://www.stackoverflow.com/ 

(ou, bien sûr, l'équivalent en Python avec subprocess ou similaire) devrait faire ce que vous voulez.

+0

Vraiment, "webbrowser" de Python devrait le faire. Si c'est la bonne réponse générale, je vais apporter un correctif au code Python principal, à moins que vous ne vouliez être le seul à le faire? –

+0

Allez-y. –

+0

Je l'ai ajouté au bug tracker Python sous le numéro 7192 (voir http://bugs.python.org/issue7192). Cela inclut un patch partiel, mais je ne pense pas que ce soit une solution complète. –

1

Apple utilise des services de lancement pour trouver des applications. Une application peut être utilisée par la commande d'ouverture - Apple developer man page for open

La commande python que vous voulez est

client = webbrowser.get("open -a /Applications/Firefox.app %s") 

Après commentaire de Nicholas Riley

Si Firefox est sur la liste des applications, vous pouvez obtenir avec open -a Firefox.app% s

+0

Vous ne devriez pas coder le chemin vers Firefox; il peut être installé n'importe où. –

+0

"open -a /Applications/Firefox.app% s" ne fonctionne pas. Même à partir de la ligne de commande qui ouvre une URL en utilisant Safari, mon navigateur par défaut. J'ai creusé un peu et il semble y avoir une différence entre OS X 10.4 (que j'ai) et 10.5. Si je fais "open -a Firefox% s" alors ça marche. Une autre option (après avoir regardé autour) est "open -b org.mozilla.firefox% s". Je ne sais pas vraiment ce qu'est un "identificateur de paquet", mais plusieurs endroits utilisent cette incantation. Je vais utiliser la version -b. Merci pour l'indice! –

+1

Un identifiant de bundle est un identifiant unique pour les applications sur Mac OS X (remplacement partiel du «code créateur» de quatre octets).Les services de lancement indexent les identifiants de regroupement et saisissent des informations afin de gérer l'ouverture des applications/documents/URL; Si vous souhaitez voir le type d'informations qu'il indexe, exécutez /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister-dump. –

Questions connexes