Jason Schriener at ESRI got this work around for me.
Add this def:
def run_in_other_thread(function): #conflicts w/ os.startfile will crash arcmap. this is a workaround
# 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_
Call it like this:
startfile = run_in_other_thread(os.startfile)
startfile(theFilePath)