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

Python使用subprocess调用多个Rhino脚本时如何等待每个脚本执行完成

问题根源

你当前是把3个脚本的执行命令一次性传入Rhino的/runscript启动参数,Rhino的内置命令队列不会等待前一个Python脚本的所有同步/异步操作(比如文件IO、图层修改、几何体更新)全部完成,就会启动下一个命令,所以才会出现bbox拆分脚本提前执行的问题。


解决方案

方案1:拆分subprocess调用,单次仅执行一个脚本(改造成本最低)

每次调用只传一个脚本给Rhino,利用subprocess.run默认阻塞等待进程结束的特性,确保上一个脚本的所有操作完全落地、Rhino进程退出后,再启动下一次调用。
代码示例:

import subprocess

# 定义单脚本调用函数
def run_rhino_script(script_path, rhino_path, rhino_file):
    script_call = "_-RunPythonScript {} ".format(script_path)
    call_cmd = '"{0}" /nosplash /runscript="{1}", "{2}"'.format(rhino_path, script_call, rhino_file)
    # check=True参数会在前序脚本执行出错时直接抛出异常,避免继续执行后续无效操作
    subprocess.run(call_cmd, check=True)

# 按依赖顺序执行三个脚本
run_rhino_script(xyz_script_path, rhino_path, rhino_file)
run_rhino_script(dxf_script_path, rhino_path, rhino_file)
run_rhino_script(bbox_script_path, rhino_path, rhino_file)
  • 优势:不需要修改原有三个脚本的任何代码
  • 缺点:每次启动Rhino进程会有额外的启动开销

方案2:编写统一控制脚本,在Rhino内部顺序执行(执行效率最高)

把三个脚本的执行逻辑封装到一个主控制脚本中,在主脚本里显式等待每一步操作完成后再执行下一步,全程只启动一次Rhino进程。

  1. 新建main_control.py控制脚本,内容示例:
# 导入三个原有脚本的功能函数(如果是独立脚本可以直接import,或者把原有逻辑复制过来即可)
import xyz_import_script
import dxf_import_script
import bbox_split_script
import scriptcontext
import Rhino

# 第一步:执行xyz导入,加图层校验确保操作完成
xyz_import_script.run()
# 替换为你实际重命名后的xyz图层名,校验通过再走下一步
while not scriptcontext.doc.Layers.FindName("重命名后的xyz图层名", False):
    Rhino.RhinoApp.Wait()
    scriptcontext.doc.Views.Redraw()

# 第二步:执行dxf导入,同样加校验
dxf_import_script.run()
# 替换为你实际重命名后的dxf图层名
while not scriptcontext.doc.Layers.FindName("重命名后的dxf图层名", False):
    Rhino.RhinoApp.Wait()
    scriptcontext.doc.Views.Redraw()

# 第三步:确认所有前置操作完成后再执行bbox拆分
bbox_split_script.run()
scriptcontext.doc.Save()
  1. 修改subprocess调用逻辑,仅调用这一个主控制脚本即可:
script_call_main = "_-RunPythonScript {} ".format(main_control_script_path)
call_script = '"{0}" /nosplash /runscript="{1}", "{2}"'.format(rhino_path, script_call_main, rhino_file)
subprocess.run(call_script, check=True)
  • 优势:仅启动一次Rhino进程,加了显式校验逻辑稳定性更强
  • 缺点:需要对原有脚本做少量改造,方便导入调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:57:04