@BMac del código también se bloquea mi ArcMap 10.1 instalación de SP1.
Este código funciona correctamente, sin embargo:
import arcpy
import pythonaddins
import webbrowser
from threading import Thread
def OpenBrowserURL():
url = 'http://www.google.com'
webbrowser.open(url,new=2)
class OpenWebBrowserButtonClass(object):
"""Implementation for WebBrowserAddIn.openWebBrowserButton (Button)"""
def __init__(self):
self.enabled = True
self.checked = False
def onClick(self):
t = Thread(target=OpenBrowserURL)
t.start()
t.join()
Puedo llamar a la misma función de un nuevo hilo. Add-in de Python clases probablemente se ejecutan en el subproceso de interfaz de usuario por defecto y tal vez hay alguna condición de carrera o de otro problema que causa el ArcMap se bloquea, pero si llama desde otro hilo funciona.
Actualización: acabo de ver un Equipo de ArcGIS Python post en el blog sobre esto:
os.startfile
y webbrowser.open
son dos funciones muy útiles en la
Biblioteca de Python. Sin embargo, debido a algunos conflictos en la forma de Windows
las bibliotecas de esperar a ser llamado, que puede provocar una caída del sistema cuando se le llama
dentro de ArcGIS for Desktop en un complemento o secuencia de comandos de secuencia de comandos de geoprocesamiento
de la herramienta (ver la sección de Observaciones en este MSDN página de referencia).
import functools
import os
import threading
import webbrowser
# A decorator that will run its wrapped function in a new thread
def run_in_other_thread(function):
# functool.wraps will copy over the docstring and some other metadata
# from the original function
@functools.wraps(function)
def fn_(*args, **kwargs):
thread = threading.Thread(target=function, args=args, kwargs=kwargs)
thread.start()
thread.join()
return fn_
# Our new wrapped versions of os.startfile and webbrowser.open
startfile = run_in_other_thread(os.startfile)
openbrowser = run_in_other_thread(webbrowser.open)
Las funciones locales startfile y openbrowser estará disponible,
que tienen los mismos parámetros que los de la versión en la biblioteca estándar
pero se ejecute en otro hilo y por lo tanto funcionan como se esperaba.
Algo relacionado con: Estrellarse ArcGIS 10.1 Add-ins con Multiprocesamiento