You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome原生消息主机调用Pipenv环境及Flask CLI命令失败的解决方案咨询

Chrome原生消息主机调用Pipenv环境及Flask CLI命令失败的解决方案咨询

我正在尝试用Flask应用的CLI工具为Chrome扩展处理一些数据。我已经成功配置了原生消息主机,能建立连接接收请求并回复,但触发CLI工具这块遇到了麻烦。

我想用CLI工具做后端的原因是,它既能作为独立的CLI应用运行,又能处理Chrome扩展的各种任务。

目前看来主要问题是,当从扩展调用时,系统识别不了pipenv、python和python3。我想知道有没有办法配置Chrome扩展的原生消息主机,让它要么能使用pipenv shell,要么能访问Flask应用及其CLI命令?我在想是不是必须用服务器,但本地启动/使用(不是远程托管)似乎不太现实。

项目结构

\root
    \app
        \commands
            \pdf_group
            __init__.py
            combine.py
        __init__.py
    __init__.py
    app.py
Pipfile
native_host.py
some_script.py

我已经尝试过的方法

  • 在native_host.py中导入代码:from app.commands import my_cli_command
    直接导入代码失败,导致原生主机无响应。扩展报错:Unchecked runtime.lastError: Error when communicating with the native messaging host. 用完整导入路径from app.commands.pdf_group.combine import my_cli_command也是一样的结果。
  • 在native_host.py中执行os.system("/opt/homebrew/bin/pipenv")
    我本地终端用which pipenv得到了这个路径,就试着在原生主机里用,但结果还是一样。
  • 执行subprocess.call("flask pdf combine")
    同样无响应。
  • 在native_host.py中import click
    还是一样的问题。Click是Flask的依赖,所以我觉得第三方库的特性可能是导致失败的原因之一。
  • 在native_host.py中import some_script并调用some_script.do()
    结果依旧。这个脚本在项目根目录下(do()显然不是脚本主函数的合适名字,我希望能找到不需要依赖some_script的解决方案)。

基本上,任何来自应用或CLI应用本身的第三方代码在native_host.py里都无法运行,都会导致原生主机无法响应。

  • 执行os.system("which python")或os.system("which pipenv")
    输出结果是错误码256,说明系统找不到这些工具的路径。
  • 我在命令行或Python shell里试过所有这些方法,都能正常工作。

临时解决方案(非理想)

我终于让它能运行了,但感觉这不是理想的办法:

  1. 在终端进入pipenv shell
  2. 复制which python3输出的路径
  3. 在native_host.py里用这个路径来运行应用:
import os
os.system("/Users/bernadette/.local/share/virtualenvs/convert_and_combine_pdfs-mqF7aRtH/bin/python3 ./some_script.py")

看起来关键是直接访问虚拟环境,但这样处理后,原生主机的回复好像没法正常返回。

剩余问题

  • 是不是必须用“脚本套脚本”的方式才能让它正常工作?
  • subprocess.call("...")好像不管用,有没有办法用subprocess代替os.system?

备注:内容来源于stack exchange,提问作者Boom100100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:59:29