如何获取Hydra生成输出目录时使用的运行日期与时间?
最佳解决方案
你定义的now_dir配置字段在Hydra完成配置插值后,已经是和输出目录完全一致的时间字符串,直接从传入的DictConfig对象读取即可,这是最便利也最准确的方案:
import hydra from omegaconf import DictConfig from datetime import datetime @hydra.main(version_base=None, config_path="你的配置目录", config_name="你的配置文件名") def main(cfg: DictConfig): # 直接获取已经插值完成的时间字符串,和Hydra创建输出目录用的时间完全一致 now_dir_str = cfg.now_dir print(now_dir_str) # 输出格式示例:2024-06-15/16-25-08 # 如果需要转成Datetime对象,自行解析即可 date_part, time_part = now_dir_str.split("/") now_datetime = datetime.strptime(f"{date_part} {time_part}", "%Y-%m-%d %H-%M-%S") print(now_datetime)
其他备选方案
如果没有提前定义now_dir字段,也可以通过Hydra内置的运行时配置获取输出目录,再拆分出时间部分:
import hydra from omegaconf import DictConfig @hydra.main(version_base=None, config_path="你的配置目录", config_name="你的配置文件名") def main(cfg: DictConfig): # 获取Hydra生成的运行目录完整路径 run_dir = hydra.core.hydra_config.HydraConfig.get().run.dir # 拆分出时间部分即可 now_dir_str = "/".join(run_dir.split("/")[-2:])
注:Hydra同一次运行过程中所有
${now}插值使用的都是程序启动时的同一个时间戳,不存在多个${now}取值不一致的问题,直接读取配置字段的方案完全可以保证和输出目录的时间一致。
内容的提问来源于stack exchange,提问作者dallonsi
相关产品推荐
相关产品推荐

