我正在开发一个Chrome扩展程序,它使用本地消息传递功能与Python脚本进行通信。作为Python脚本的一部分,我需要监视文件系统,因此我将watchdog作为第三方依赖项引入。我使用pip安装了这个包,全局和使用virtualenv,我在脚本中引入了两个类,其中包括以下行:
from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer
字符串
这一切都很简单。这里是它变得奇怪的地方。如果我在命令行上使用python运行脚本,它运行得很好。此外,如果我从命令行使用以下命令启动Chrome:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
型
本机脚本被Chrome扩展成功调用。但是,如果我正常启动Chrome(只需单击Chrome应用程序图标),我会在启动时收到以下错误:
Native host has exited.
型
如果我从我的脚本中删除两个看门狗导入行,它运行良好。我很卡住,因为我似乎没有办法调试问题,因为它在我从终端启动脚本时工作。
2条答案
按热度按时间j2datikz1#
本机消息指出错误
Native host has exited.
是由于:在Chrome读取消息之前,到本机消息主机的管道已中断。这很可能是从本机消息主机发起的。
如文件所述:
支持本机消息传递的本机应用程序必须注册一个知道如何与扩展通信的本机消息传递主机。应用程序必须安装一个清单文件,该文件必须是有效的JSON,并包含定义本机消息传递主机配置的必填字段,以注册主机,如下面的示例所示:
字符串
您还可以查看examples/api/nativeMessaging,以获取使用本机消息传递与作为本机消息传递主机的Python脚本进行通信的示例应用程序。
xfb7svmp2#
对我来说,当我在IDE终端使用的venv之外执行
pip install <package>
时,问题就解决了。也应该可以使用venv加载主机脚本,也许可以使用一个调用venv python二进制文件的 Package 器shell脚本。