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

如何用Python自动化运行tNavigator模拟(而非仅启动GUI)

解决tNavigator模拟自动化的方案

一、优先使用命令行模式(无需GUI,更稳定)

tNavigator支持批处理模式直接运行模拟,无需启动GUI,这比图像识别的方式更可靠,也更容易监控运行状态、提取结果。

1. 命令行核心参数说明

  • -batch:启用无GUI的批处理运行模式
  • -run:指定启动后直接运行模型
  • -log <日志路径>:输出运行日志到指定文件,用于后续验证运行状态

2. Python实现代码示例

import subprocess
import os
import time

# 路径配置
exe_path = r"D:\tNavigator\t-navigator22.4\tNavigator-22.4.exe"
model_path = r"D:\tNavigator\Project\IP14_CO2\IP14_E300.DATA"
log_path = r"D:\tNavigator\Project\IP14_CO2\run_log.txt"
# RSM文件默认与DATA文件同目录,命名规则为<模型名>.RSM
rsm_path = os.path.splitext(model_path)[0] + ".RSM"

# 构建命令行参数
cmd = [
    exe_path,
    "-batch",
    "-run",
    model_path,
    "-log", log_path
]

# 启动模拟并等待完成
try:
    print("开始运行模拟...")
    # 等待进程结束,捕获输出
    process = subprocess.run(cmd, check=True, capture_output=True, text=True)
    print("模拟运行完成!")

    # 验证模拟是否成功
    with open(log_path, "r", encoding="utf-8") as f:
        log_content = f.read()
        # 根据tNavigator实际日志关键字调整,示例为"模拟成功完成"的对应英文标识
        if "Simulation completed successfully" in log_content:
            print("✅ 模拟成功完成")
        else:
            print("❌ 模拟可能失败,请查看日志确认")

    # 提取结果文件与摘要
    if os.path.exists(rsm_path):
        print(f"📄 RSM文件路径:{rsm_path}")
        # 示例:读取RSM文件前10行作为摘要输出
        with open(rsm_path, "r", encoding="utf-8") as f:
            summary = "".join(f.readlines()[:10])
            print("📋 模拟摘要:")
            print(summary)
    else:
        print("❌ 未找到RSM结果文件")

except subprocess.CalledProcessError as e:
    print(f"❌ 模拟运行出错,错误信息:{e.stderr}")

二、改进GUI自动化方案(仅当必须使用GUI时)

如果因特殊需求必须依赖GUI,可优化图像识别逻辑,并添加模拟完成的监控机制:

优化后的代码示例

import subprocess
import time
import pyautogui
import os

exe_path = r"D:\tNavigator\t-navigator22.4\tNavigator-22.4.exe"
model_path = r"D:\tNavigator\Project\IP14_CO2\IP14_E300.DATA"
run_btn_image = "run_button.png"
# 模拟完成的标识截图(如界面上的"完成"按钮/状态文字)
complete_btn_image = "complete_button.png"
rsm_path = os.path.splitext(model_path)[0] + ".RSM"

# 启动GUI并打开模型
subprocess.Popen([exe_path, model_path])
time.sleep(15)  # 根据软件启动速度调整等待时长

# 点击运行按钮
location = pyautogui.locateCenterOnScreen(run_btn_image, confidence=0.85)
if location:
    pyautogui.click(location)
    print("✅ 已点击运行按钮")
else:
    print("❌ 未找到运行按钮")
    exit()

# 等待模拟完成(双检查机制)
print("等待模拟完成...")
timeout = 3600  # 最大等待时长(秒),根据模拟耗时调整
start_time = time.time()
completed = False

while time.time() - start_time < timeout:
    # 方式1:检查界面完成标识
    if pyautogui.locateOnScreen(complete_btn_image, confidence=0.8):
        completed = True
        break
    # 方式2:检查RSM文件是否生成(更可靠)
    if os.path.exists(rsm_path) and os.path.getsize(rsm_path) > 0:
        completed = True
        break
    time.sleep(30)  # 每30秒检查一次

if completed:
    print("✅ 模拟完成")
    print(f"📄 RSM文件路径:{rsm_path}")
    # 可添加界面状态检查逻辑验证模拟是否成功
else:
    print("❌ 模拟超时未完成")

关键注意事项

  • 命令行模式优先:完全脱离GUI依赖,不受分辨率、窗口遮挡影响,错误捕获更直接,是自动化的最优选择。
  • 日志校验:通过日志文件的关键字可以精准判断模拟状态,需根据tNavigator的实际日志输出调整校验关键字。
  • 绝对路径:所有文件路径建议使用绝对路径,避免相对路径导致的文件找不到问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:27:33