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

如何确保fast-downward生成的plan.txt写入磁盘后再读取

解决方法

1. 靠subprocess的阻塞特性等规划器跑完

subprocess.run() 默认会卡住当前进程,直到fast-downward规划器完全执行完退出。所以当这条命令执行完时,plan.txt肯定已经写完了,完全不需要加sleep拖时间。

2. 直接用Python读文件,别折腾subprocess调用cat

没必要额外调用cat命令,用Python自带的文件读取功能就行,既高效又少折腾。

优化后的代码

import subprocess

search_options = "lama-first"
cmd = [
    "python3",
    self.planner_path,
    "--alias",
    search_options,
    "--plan-file",
    self.plan_path,
    self.domain_path,
    self.problem_path,
]

plan = []
try:
    # 等待规划器执行完成,check=True会在规划器出错时抛出异常
    subprocess.run(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
    # 直接读取plan文件
    with open(self.plan_path, 'r', encoding='utf-8') as f:
        plan = f.read()
except subprocess.CalledProcessError as e:
    print(f"规划器运行出错: {e.stderr.decode('utf-8')}")
except FileNotFoundError:
    print(f"没找到plan文件: {self.plan_path}")
except Exception as e:
    print(f"读取plan文件时出错: {str(e)}")

补充说明

  • 加check=True是为了在规划器返回错误码时及时抛出异常,方便排查问题。
  • 捕获具体的异常类型比直接用except:更靠谱,能针对性处理不同的错误场景。
  • 除非fast-downward有特殊的后台写入逻辑(这种情况几乎不存在),否则等进程退出后读取文件绝对可靠,因为正常程序退出前会把文件缓冲区的内容刷到磁盘里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:01:01