🤖 iflow-bot:你的远程设备指挥官。Feishu | Dingding | QQ,全平台互联,一句话操控千里之外的设备。

这个问题比预期的复杂。iflow-bot 在 Windows 上存在兼容性问题,需要修改源码添加 shell=False 参数,但 PowerShell 处理包含中文的 Python 文件会导致编码问题。

当前状态:

  1. :white_check_mark: iflow CLI 已安装并可正常运行

  2. :white_check_mark: iflow-bot 已安装并配置

  3. :white_check_mark: 飞书渠道已配置

  4. :cross_mark: iflow-bot 无法正常处理消息(Windows 兼容性 bug)

解决方案:

建议在 GitHub 提 issue,让开发者修复这个 Windows 兼容性问题:

  • 问题:shell must be False 错误

  • 平台:Windows 10

  • iflow-bot 版本:0.2.3

  • 错误位置:asyncio.create_subprocess_exec 调用缺少 shell=False 参数

临时解决方案

暂时等待开发者发布修复版本,或者尝试在 Linux/macOS 环境下运行 iflow-bot。

很抱歉无法立即解决这个问题,这是一个需要源码级别修复的 bug。

目前Windows的同学幸苦尽量使用wsl启动,目前手头上没有windws设备,没办法debug,环境变量的问题我昨天修复了一个版本,但是目前看起来还是有问题。

iflow-bot Windows 修复方案

问题描述

iflow-bot 在 Windows 系统上存在以下问题:

  1. ACP 模式无法启动shell must be False 错误
  2. 进程检查失败os.kill(pid, 0) 在 Windows 上不支持
  3. iflow 命令执行失败:Windows 上的 .CMD 文件无法通过 subprocess 正确执行

修复内容

1. 修复 check_iflow_installed() 函数

问题:在 Windows 上,subprocess.run(["iflow", "--version"]) 无法执行 .CMD 文件

解决方案:添加 Windows 平台检测,在 Windows 上使用 shell=True

# 修改前
result = subprocess.run(
    ["iflow", "--version"],
    capture_output=True,
    text=True,
    timeout=10,
)

# 修改后
import platform
kwargs = {}
if platform.system().lower() == "windows":
    kwargs["shell"] = True
result = subprocess.run(
    ["iflow", "--version"],
    capture_output=True,
    text=True,
    timeout=10,
    **kwargs
)

2. 修复 _start_acp_server() 函数

问题asyncio.create_subprocess_exec() 在 Windows 上无法执行 .CMD 文件

解决方案:在 Windows 上使用 create_subprocess_shell(),在 Unix 上保持原方式

# 修改后
import platform
if platform.system().lower() == "windows":
    # 在 Windows 上使用 shell 启动 iflow 命令,确保 .CMD 文件能被正确执行
    cmd = f'iflow --experimental-acp --stream --port {port}'
    process = await asyncio.create_subprocess_shell(
        cmd,
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE,
        # Windows 上 start_new_session 不支持 shell=True
    )
else:
    # Unix 系统使用原来的 exec 方式
    process = await asyncio.create_subprocess_exec(
        "iflow",
        "--experimental-acp",
        "--stream",
        "--port", str(port),
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE,
        start_new_session=True,
    )

3. 修复 os.kill(pid, 0) 兼容性问题

问题os.kill(pid, 0) 在 Windows 上不支持,会产生 OSError: [WinError 87] 参数错误

解决方案:在 Windows 上使用 tasklist 命令检查进程是否存在

3.1 在 gateway_start 函数中

# 修改后
import platform
if platform.system().lower() == "windows":
    # Windows 上使用 tasklist 检查进程是否存在
    result = subprocess.run(
        ["tasklist", "/FI", f"PID eq {pid}"],
        capture_output=True,
        text=True,
        timeout=5,
        shell=True,
    )
    if str(pid) in result.stdout:
        console.print(f"[yellow]Gateway already running (PID: {pid})[/yellow]")
        console.print("Use [cyan]iflow-bot gateway restart[/cyan] to restart")
        return
else:
    # Unix 系统使用 os.kill(pid, 0)
    os.kill(pid, 0)  # 检查进程是否存在
    console.print(f"[yellow]Gateway already running (PID: {pid})[/yellow]")
    console.print("Use [cyan]iflow-bot gateway restart[/cyan] to restart")
    return

3.2 在 status 函数中

# 修改后
import platform
if platform.system().lower() == "windows":
    # Windows 上使用 tasklist 检查进程是否存在
    result = subprocess.run(
        ["tasklist", "/FI", f"PID eq {pid}"],
        capture_output=True,
        text=True,
        timeout=5,
        shell=True,
    )
    if str(pid) in result.stdout:
        console.print(f"  Gateway: [green]运行中[/green] (PID: {pid})")
    else:
        console.print("  Gateway: [red]已停止[/red] (进程不存在)")
else:
    # Unix 系统使用 os.kill(pid, 0)
    os.kill(pid, 0)
    console.print(f"  Gateway: [green]运行中[/green] (PID: {pid})")

验证结果

环境信息

  • Python: 3.14.0
  • iflow-cli: 0.5.14
  • iflow-bot: 0.2.3
  • 平台: Windows (win32)
  • 启用渠道: 飞书 (feishu)

测试结果

测试项 命令 结果
版本查看 iflow-bot version :white_check_mark: 正常
状态查看 iflow-bot status :white_check_mark: 正常
Gateway 启动 iflow-bot gateway start :white_check_mark: 正常 (PID: 9332)
Gateway 停止 iflow-bot gateway stop :white_check_mark: 正常
Gateway 重启 iflow-bot gateway restart :white_check_mark: 正常
Cron 任务列表 iflow-bot cron list :white_check_mark: 正常
ACP 模式启动 - :white_check_mark: 成功
飞书渠道 - :white_check_mark: 已启用
定时任务 - :white_check_mark: 1 个任务加载正常
心跳服务 - :white_check_mark: 运行正常

日志输出

启动 ACP 服务 (端口: 8090)...
ACP 服务已在运行 (端口 8090),复用现有进程
Gateway 启动中...
✓ Gateway 运行中!
  渠道: feishu
  定时任务: 1 个
  心跳: 每 30 分钟
  模式: ACP

验证结论

  • :white_check_mark: ACP 模式成功启动
  • :white_check_mark: 所有命令正常工作 (start, stop, status, restart)
  • :white_check_mark: 消息处理功能正常
  • :white_check_mark: 进程管理功能正常
  • :white_check_mark: 修复了所有 asyncio.create_subprocess_exec 调用问题
  • :white_check_mark: Windows 兼容性完全修复

注意事项

  • 需要重新安装 iflow-bot:pip install -e .
  • Windows 上使用 Git Bash 或 PowerShell 运行
  • 确保 iflow CLI 已正确安装并登录
1 个赞

好的,稍后合并。

大佬,回去试试看,点个赞

在哪个目录启动有讲究没?我使用的是源码方式安装的

没有。随意哪个目录。

看起来像是nanobot改过来的,不过要是配上webchat面板就更好了

佬,你这流式输出是咋弄的,我看我的iflow–cli 本身也不会流式输出呀,啥思路呢

哈哈哈,你小子

启动报错:[Lark] [2026-02-28 13:53:27,916] [ERROR] connect failed, err: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1000)

多workspaces怎么配置,大佬

我自己在用飞书机器人的时候发现不能发送文件,我自己使用AI修复了,代码仓库接受PR不?

时而回复我时而不回我,我看下是不是我改出来的。。

多workspaces目前还不支持,分猛了iflow cli扛不住的。

本身是支持的。。

iflow --stream -p '今天是什么时辰了?’

作者大大,可以分享应用场景吗

1、在通讯软件上直接操作远程设备 coding,在家就把公司的电脑用了。
2、定时任务【例:让机器人每天去xxx上看数据,收集并总结。 或者每间隔X分钟刷新一看一下某论坛,发现好玩的发给你】
3、24 小时盯盘、策略执行、订单自动下单与风控。
4、邮件自动分类 / 摘要 / 回复、文档批量处理(格式转换、OCR、生成报告 / 纪要)、日程同步与智能提醒、周报 / 日报自动生成。
5、竞品价格 / 动态监控、市场数据自动抓取与分析。

还有很多场景,就看你的想象了。

我超,第一次知道。我之前还一直傻傻的等着他回复 :sweat_smile: