如何实现每次仅运行一个3ds Max实例并复用已有实例执行脚本
复用已打开的3ds Max实例执行Python脚本
方法一:通过COM自动化连接现有实例(推荐)
这是最可靠的实现方式,利用Windows COM接口直接操控正在运行的3ds Max实例:
- 编写一个辅助Python脚本(例如命名为
run_in_existing_max.py),代码如下:
import win32com.client try: # 连接到已运行的3ds Max实例 max_app = win32com.client.GetActiveObject("3dsmax.Application") # 执行目标脚本,第二个参数3表示脚本类型为Python max_app.ExecuteScript("F:/code/3dmax/dsmax_snapshot.py", 3) print("脚本已在现有3ds Max实例中执行完成") except Exception as e: print(f"连接失败:{str(e)}")
- 直接运行这个辅助脚本即可,无需再调用
3dsmax命令行启动新实例。
方法二:结合进程检测+COM(适配复杂场景)
如果需要保留命令行触发的形式,可以先检测是否有3ds Max进程在运行,再决定复用实例还是启动新实例:
import psutil import win32com.client import subprocess def check_max_running(): for proc in psutil.process_iter(['name']): if proc.info['name'] == '3dsmax.exe': return True return False if check_max_running(): try: max_app = win32com.client.GetActiveObject("3dsmax.Application") max_app.ExecuteScript("F:/code/3dmax/dsmax_snapshot.py", 3) print("复用现有实例执行脚本") except Exception as e: print(f"连接实例失败,启动新实例:{str(e)}") subprocess.run(['3dsmax', '-silent', '-U', 'PythonHost', 'F:/code/3dmax/dsmax_snapshot.py']) else: subprocess.run(['3dsmax', '-silent', '-U', 'PythonHost', 'F:/code/3dmax/dsmax_snapshot.py'])
关键配置说明
确保3ds Max开启了自动化访问权限:
- 打开3ds Max,依次进入
自定义 > 首选项 > 常规 - 勾选
启用MAXScript访问和启用Python访问选项
内容的提问来源于stack exchange,提问作者li lu
相关产品推荐
相关产品推荐

