如何在不需要断点的情况下运行AnkiQt脚本?

2024-05-29 10:32:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我运行下面的玩具脚本,如图所示:

import sys
sys.path.append('/usr/share/anki')
import aqt

app = aqt._run(argv=['/usr/bin/anki', '--profile=test'], exec=False)
# breakpoint()
print(repr(aqt.mw.col))
aqt.mw.cleanupAndExit()

…我得到以下输出,这是不正确的:

$ python3 /tmp/ankiq.py
None

但是,如果我取消注释已注释语句并重新运行修改后的脚本,我将得到正确的输出(最终):

$ python3 /tmp/ankiq.py
> /tmp/ankiq.py(8)<module>()
-> print(repr(aqt.mw.col))
(Pdb) c
<anki.collection._Collection object at 0x7f32ec1417b8>

我希望避免使用breakpoint()语句(以及每当我想运行这样的代码时必须点击c

我的猜测是,当注释掉breakpoint()语句时,print语句发生在aqt.mw完全初始化之前

(我尝试用time.sleep(1)替换breakpoint()语句,但是当我运行带有此修改的脚本时,它在打印任何输出之前挂起。)

Q:如何修改上面的toy脚本,以便在执行print语句时,aqt.mw.col具有正确的值


Tags: pyimport脚本usrsyscol语句tmp
1条回答
网友
1楼 · 发布于 2024-05-29 10:32:46

调用aqt._run(*args, exec=False)似乎会返回一个QApplication对象,但不会启动其事件循环。因此,要手动处理挂起的事件,可以尝试调用app.processEvents()


从评论中可以看出,确切的解决方案如下:

while aqt.mw.col is None: 
    app.processEvents()

相关问题 更多 >

    热门问题