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

如何无需断点运行Anki-Qt脚本并正确获取aqt.mw.col值

问题原因

aqt._run 传入 exec=False 时,仅完成Anki主窗口的基础实例化,不会自动启动Qt事件循环,集合加载、主窗口初始化这类异步任务都会留在事件队列中等待执行。直接调用print时这些任务还未执行,所以aqt.mw.col返回None。
breakpoint能生效是因为pdb中断时,底层会处理待执行的Qt事件,刚好完成了集合初始化;而time.sleep会阻塞主线程,事件队列完全不会被处理,所以永远等不到初始化完成,还会导致程序卡住。

修改后的代码

import sys
import time
sys.path.append('/usr/share/anki')
import aqt
from PyQt5.QtCore import QCoreApplication

app = aqt._run(argv=['/usr/bin/anki', '--profile=test'], exec=False)

# 循环处理事件直到集合初始化完成
while aqt.mw.col is None:
    QCoreApplication.processEvents()
    # 添加短延时避免空转占用过高CPU
    time.sleep(0.01)

print(repr(aqt.mw.col))
aqt.mw.cleanupAndExit()

代码说明

  • 调用QCoreApplication.processEvents()会主动处理当前队列里所有待执行的Qt事件,驱动Anki的初始化流程推进
  • 0.01秒的短延时不会影响初始化速度,同时可以避免循环空转占用过多CPU资源
  • 循环判断aqt.mw.col is None保证只有集合初始化完成后,才会执行后续的打印逻辑

内容的提问来源于stack exchange,提问作者kjo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:03