Flask API调用recasepunc模型时subprocess返回非零退出状态1问题
解决recasepunc模型调用报错的步骤
捕获详细错误信息
原代码仅获取标准输出,无法看到具体错误原因。修改subprocess调用逻辑,同时捕获标准错误输出:import subprocess text = "Hello" try: # 改用列表传参,避免shell解析带来的问题 proc = subprocess.Popen( ["python", "recasepunc/recasepunc.py", "predict", "recasepunc/checkpoint"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) stdout, stderr = proc.communicate(input=text) if proc.returncode != 0: print(f"错误详情: {stderr}") else: print(stdout) except Exception as e: print(f"执行异常: {str(e)}")运行后即可看到具体报错内容,比如模型文件缺失、参数格式错误等。
验证命令行直接调用
脱离Flask环境,在终端手动执行命令测试:echo "Hello" | python recasepunc/recasepunc.py predict recasepunc/checkpoint如果命令行也报错,说明问题出在模型本身或参数配置,和Flask无关,优先根据终端的错误提示排查。
检查checkpoint路径有效性
确认recasepunc/checkpoint目录真实存在,且包含模型运行必需的文件(如权重文件、配置文件等)。若路径不正确,替换为正确的绝对路径或相对路径。确认Python环境一致性
检查Flask运行的Python环境和安装依赖的环境是否一致:- 终端执行
which python查看当前环境路径 - 在Flask代码中添加
import sys; print(sys.executable)打印运行环境路径
若路径不同,说明依赖安装在了错误的环境,切换到对应环境重新安装依赖即可。
- 终端执行
核对模型输入要求
查看recasepunc.py中predict模式的代码逻辑,确认输入格式是否符合要求(比如是否需要全小写输入、是否要求每行一个句子等),调整输入文本格式后再次测试。
内容的提问来源于stack exchange,提问作者Xenia
相关产品推荐
相关产品推荐

