如何通过Poetry工具运行Python异步脚本?解决协程未await报错
解决Poetry运行Python异步脚本的错误问题
问题原因
你遇到的RuntimeWarning是因为Poetry调用脚本时,直接执行了你的async def main()函数——异步函数直接调用只会返回协程对象,不会实际执行,自然触发“协程从未被await”的警告。而你写的if __name__ == "__main__"分支只有在直接运行脚本文件时才会生效,Poetry调用模块函数时不会进入这个分支。
修复方案
方法一:封装同步入口函数
修改你的Python脚本代码,把异步逻辑和同步入口分开:
from anyio import run async def async_main(): # 这里写你的异步业务逻辑 pass def main(): # 用anyio.run执行异步函数 run(async_main) if __name__ == "__main__": # 直接运行脚本时也能正常执行 main()
pyproject.toml的配置保持不变:
[tool.poetry.scripts] clear_data = "clear_data.clear_data:main"
方法二:直接修改原main函数(简化版)
如果不想拆分函数,也可以把原main改成同步函数,内部调用异步逻辑:
from anyio import run async def _main(): pass def main(): run(_main) if __name__ == "__main__": main()
验证
执行poetry run clear_data,此时Poetry调用的是同步的main函数,它会通过anyio.run正确触发异步逻辑,不会再出现警告。
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

