PyAEDT CLI 技能
您可以访问 pyaedt CLI 来与 ANSYS Electronics Desktop (AEDT) 进行交互。本技能教您如何有效使用它。
预检(先运行)
在任何 CLI 命令之前,请验证 pyaedt 是否已安装:
pyaedt --json version
如果命令失败,请停止,并指示用户首先安装它,使用 all 安装目标以启用全部功能。
pip install pyaedt[all]
调用 CLI
在运行任何命令之前,请先解析一次 pyaedt 可执行文件路径:
- 尝试直接使用
pyaedt。如果它在系统 PATH 中,则直接使用。 - 如果未找到,则回退到当前工作目录下的虚拟环境本地可执行文件:
- Windows:
.venv\Scripts\pyaedt - Linux/macOS:
.venv/bin/pyaedt
- Windows:
所有示例为简洁起见均使用 pyaedt。如有需要,请将其替换为解析后的路径。
生成工件的工作目录
除非用户另有指定,否则对所有导出和生成的文件使用临时目录。
规则:
- 在操作系统临时目录下创建一个任务特定的子目录
- 使用
tempfile.mkdtemp(prefix="pyaedt-skill-")(Python)、$env:TEMP(Windows) 或${TMPDIR:-/tmp}(Linux/macOS) - 除非明确要求,否则不要写入仓库或任意文件夹
- 仅当用户希望保留工件时,才在成功导出后将工件从临时目录移出
快速参考:
import tempfile
temp_dir = tempfile.mkdtemp(prefix="pyaedt-skill-")
在导出命令中将此路径传递给 --path 或 --output。
对非交互式命令使用 --json
对所有非交互式命令使用 --json,以便输出保持结构化且机器可解析。
JSON 输出返回:{"status": "ok", "data": {...}} 或 {"status": "error", "error": "message"}
在使用 data 之前,请始终解析 status 字段。切勿依赖人类可读的输出。
例外情况:
session attach启动一个交互式控制台,因此人类模式是可以接受的。doc命令会打开浏览器页面,通常不作为结构化自动化输出使用。
当前 CLI 结构
命令组织如下:
pyaedt [--json] <group> <command> [options]
当前 CLI 中的可用组:
sessionprojectscriptexporttest-configpanelsdoc
顶级命令:
versionaedt-versions
不要发明当前 CLI 中不存在的其他命令组或命令。 如果 CLI 不支持所需操作,请向用户报告,而不是试图绕过它。
基于端口的模型
当前 CLI 主要是基于端口的。
session start启动一个新的 AEDT 实例并返回其 gRPC 端口。session list发现正在运行的 AEDT 实例。- 大多数操作命令需要显式指定
--port。 session attach也可用于选择现有的 AEDT 会话,包括通过--project或--design,因此并非每个工作流都从已知端口开始。- 没有持久化的
session connect状态可供稍后重用。
实际含义:
# 发现或启动 AEDT
pyaedt --json session list
pyaedt --json session start --version 2026.1 --non-graphical
# 然后将 --port 传递给所需的命令
pyaedt --json project list --port 50051
pyaedt --json run my_script.py --port 50051
项目和设计解析规则
设计作用域的命令使用一组共享的解析规则。这一点很重要,应在指导和示例中一致应用。
受影响的命令:
export screenshotexport configsession attach(当与--project或--design一起使用时)
解析规则:
- 如果同时提供了
--project和--design,则直接使用它们。 - 如果仅提供了
--project,则该项目必须恰好包含一个设计。 - 如果仅提供了
--design,则必须恰好有一个项目处于打开状态。 - 如果两者都未提供,则必须恰好有一个打开的项目,并且其中恰好有一个设计。
- 如果选择不明确,命令将失败,并且必须提供缺失的选择器。
在帮助用户时,除非命令实际使用了该行为,否则不要将此行为描述为“活动项目”或“活动设计”回退。预期行为是基于唯一性的解析。
命令参考
顶级命令
| 命令 | 描述 |
|---|---|
pyaedt --json version | 显示 PyAEDT 版本 |
pyaedt --json aedt-versions | 列出机器上已安装的 AEDT 版本 |
会话管理
| 命令 | 描述 |
|---|---|
pyaedt --json session start --version 2026.1 [--port 50051] [--non-graphical] | 启动新的 AEDT 实例 |
pyaedt --json session list | 列出正在运行的 AEDT 实例,包含 PID、版本和端口 |
pyaedt --json session stop --port 50051 | 按端口停止特定 AEDT 实例 |
pyaedt --json session stop --all | 关闭所有 AEDT 实例 |
pyaedt session attach [--port 50051] [--project NAME] [--design NAME] | 启动附加到正在运行实例的交互式 PyAEDT 控制台 |
注意:
- 如果省略
--port且用户选择一个实例,session attach可以交互式工作。 - 对具有可用端口的 gRPC 实例,
session attach与--project或--design一起使用时才有效。
项目命令
所有项目命令都需要指定端口以确定目标 AEDT 实例。
| 命令 | 描述 |
|---|---|
pyaedt --json project list --port 50051 | 列出所有打开的项目及其设计 |
pyaedt --json project open "C:/path/to/file.aedt" --port 50051 [--non-graphical] | 打开 AEDT 项目文件 |
pyaedt --json project save --port 50051 [--path "C:/new/file.aedt"] | 保存活动项目,可选择另存为新文件 |
pyaedt --json project create --name ProjectA --port 50051 | 创建一个项目。使用 --name。 |
pyaedt --json project create --project ProjectA --design Design1 --type Hfss --port 50051 | 在现有项目中创建一个设计。使用 --project + --design + --type。 |
pyaedt --json project close --port 50051 [--project ProjectA] | 关闭一个项目,如果省略则关闭活动项目 |
project create 行为:
--name用于创建项目。--project+--design+--type用于创建设计。- 不要将
--name与--design/--type混用。
支持的 --type 值:
HfssMaxwell2dMaxwell3dQ3dQ2dIcepakCircuitTwinBuilderMechanicalEmitRmxprtHfss3dLayoutMaxwellCircuit
脚本命令
| 命令 | 描述 |
|---|---|
pyaedt --json run "path/to/script.py" --port 50051 | 在 AEDT 内部执行 Python 脚本 |
导出命令
| 命令 | 描述 |
|---|---|
pyaedt --json export screenshot --port 50051 [--path preview.jpg] [--project NAME] [--design NAME] | 为解析后的设计捕获截图 |
pyaedt --json export config --port 50051 [--output config.json] [--project NAME] [--design NAME] [--overwrite] | 导出设计配置 JSON |
这两个命令都是设计作用域的,因此遵循上述共享的项目/设计解析规则。
文档
| 命令 | 描述 |
|---|---|
pyaedt doc | 打开文档首页并打印帮助 |
pyaedt doc examples | 打开示例部分 |
pyaedt doc github | 打开 GitHub 仓库 |
pyaedt doc user-guide | 打开用户指南 |
pyaedt doc getting-started | 打开入门文档 |
pyaedt doc installation | 打开安装文档 |
pyaedt doc api | 打开 API 参考 |
pyaedt doc changelog [VERSION] | 打开变更日志 |
pyaedt doc issues | 打开问题页面 |
pyaedt doc search <keywords> | 搜索在线文档 |
常见工作流
工作流 1:发现或启动 AEDT
# 检查正在运行的实例
pyaedt --json session list
# 如果没有正在运行的,启动一个
pyaedt --json session start --version 2026.1 --non-graphical
决策规则:
- 如果
session list返回无进程,则启动 AEDT。 - 如果返回一个进程,则重用该端口。
- 如果返回多个进程,则询问用户使用哪个端口。
工作流 2:检查端口上的项目
pyaedt --json project list --port 50051
当您需要了解需要哪些项目和设计选择器时,请首先使用此命令。
工作流 3:创建项目或设计
# 创建一个项目。仅使用 --name(不要添加 --design 或 --type)
pyaedt --json project create --name "PatchAntenna" --port 50051
# 在现有项目中创建设计。仅使用 --project + --design + --type(不要添加 --name)
pyaedt --json project create --project "PatchAntenna" --design "HFSSDesign1" --type Hfss --port 50051
工作流 4:使用 session attach 进行交互式探索
当用户想要交互式地探索、调试或迭代设计时,将 session attach 作为首选。
它会打开一个交互式 Python 控制台,该控制台已连接到目标 AEDT 会话。desktop 已预注入,因此可以逐个发出 PyAEDT 命令,而无需编写完整脚本。
# 附加到正在运行的实例(端口可选;如果省略则提示)
pyaedt session attach --port 50051
# 在交互式 Python 控制台内部,会话已处于活动状态:
# >>> import ansys.aedt.core as aedt
# >>> hfss = aedt.Hfss(new_desktop=False, port=50051)
# >>> box = hfss.modeler.create_box([0, 0, 0], [10, 10, 10], name="MyBox")
# >>> hfss.modeler["MyBox"].color = (255, 0, 0)
向交互式 Python 控制台发送多行代码
当代理向交互式 Python 控制台发送跨多行的代码(循环、条件语句、函数定义等)时,直接粘贴会导致 IndentationError 或 SyntaxError,因为控制台将每一行视为单独的输入。
始终将多行块包装在 exec() 中,在单个字符串内将所有换行符编码为 \n:
# 失败,因为控制台在循环体处中断
for i in range(3):
print(i)
# 正确:作为单个 exec() 调用发送
exec("for i in range(3):\n print(i)")
规则:
- 对于任何包含缩进代码的块(循环、
if、with、函数或类定义),使用exec()。 - 单语句行(导入、赋值、函数调用)不需要
exec()。 - 如果外部定界符是
",则将所有内部双引号转义为\",或使用如上所示的连接字符串字面量。 - 保持
exec()调用尽可能短;如果块增长到超过约 10 行,则首选保存临时脚本并使用run。
何时优先使用 session attach 命令而非 run 命令:
| 情况 | 首选方法 |
|---|---|
| 探索设计状态,目标未知 | session attach |
| 交互式调试失败的步骤 | session attach |
| 一次性几何/参数调整 | session attach |
| 快速迭代几条命令 | session attach |
| 定义明确、可重复、多步骤的工作流 | run |
| CI / 无头 / 自动化流水线 | run |
| 工作流有超过约 5 个步骤 | run |
| 需要可追溯性和日志记录 | run |
首选 session attach。只有工作流已知且需要可重复或自动化时,才升级到 run。
同时处理多个设计
当用户需要同时处理多个设计时,为每个设计打开一个单独的交互式 Python 控制台,而不是在单个控制台内切换设计。 这使每个设计保持活动状态且可编辑,而无需关闭或释放任何一个。
# 终端 1:Design A 的控制台
pyaedt session attach --port 50051 --project "ProjectA" --design "DesignA"
# 终端 2:Design B 的控制台(相同或不同项目)
pyaedt session attach --port 50051 --project "ProjectA" --design "DesignB"
# 终端 3:不同项目中设计的控制台
pyaedt session attach --port 50051 --project "ProjectB" --design "DesignC"
规则:
- 每个控制台持有绑定到特定设计的自己的 PyAEDT 对象。关闭一个控制台不会关闭其他控制台。
- 所有控制台共享相同的 AEDT 实例(相同的
--port),因此在一个控制台中进行的更改会立即可见于 AEDT。 - 除非您有意要为所有打开的控制台关闭 AEDT,否则不要在任何这些控制台内调用
desktop.release_desktop()或aedt_app.release_desktop()。 - 如果设计位于不同的 AEDT 实例中,则为每个控制台使用匹配的
--port。
工作流 5:运行自动化
pyaedt --json run "<temp-dir>/setup_antenna.py" --port 50051
工作流 6:生成脚本执行
每当脚本已生成且必须自动运行时,使用此工作流。
# 步骤 1:发现实例
pyaedt --json session list
# 步骤 2:如果需要,启动一个
pyaedt --json session start --version 2026.1 --non-graphical
# 步骤 3:在所选端口上运行脚本
pyaedt --json run "<temp-dir>/generated_script.py" --port 50051
规则:
- 始终先确定目标端口。
- 如果多个实例正在运行,显示完整列表并询问要使用哪个端口。
- 如果工作流需要自动执行,不要告诉用户手动运行生成的脚本。
- 用于现有 AEDT 实例的生成脚本应使用
new_desktop=False。
工作流 7:导出设计数据
# 如果实例恰好有一个项目和一个设计,可以省略选择器
pyaedt --json export screenshot --port 50051 --path "<temp-dir>/preview.jpg"
pyaedt --json export config --port 50051 --output "<temp-dir>/config.json" --overwrite
# 如果存在歧义,指定缺失的选择器
pyaedt --json export screenshot --port 50051 --project "PatchAntenna" --design "H
…
[截断以进行翻译]