如何确保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
相关产品推荐
相关产品推荐

