1. Contexto / problema que resuelve
Ya instalaste Python y el paquete Moldflow vía pip siguiendo el Tip Moldflow #3, y ahora quieres correr un script listo para automatizar una tarea en Moldflow. Este tip es sobre como iniciar y también incluye las complicaciones más comunes al dar ese primer paso — válidos sin importar qué haga tu script — y los ilustra con un caso real: un script que borra automáticamente los archivos .rfn de un proyecto.
2. Explicación técnica
- El archivo tiene que ser
.pyde verdad. Si lo escribes en Notepad y usás «Guardar como» sin cambiar el tipo, Windows le agrega.txtpor detrás sin que se note (script.py.txt), y Python no lo reconoce como script propio. - Las directivas de VBScript no son válidas en Python. Los scripts viejos de Moldflow (
.vbs) suelen empezar con'%RunPerInstancecomo primera línea — es una convención de VBScript, no un comentario válido de Python. Si copias un script viejo tal cual (o una plantilla mixta), Python tiraSyntaxError: unterminated string literalen la primera línea. - La API de Python se conecta a Synergy vía COM (Windows), no lo abre por uno. El objeto
Synergy()busca una instancia de Moldflow Synergy que ya esté corriendo. Si Synergy está cerrado — o si Synergy y tu terminal (CMD) corren en distintos niveles de permisos de Windows (uno como administrador y el otro no) — Windows los aísla entre sí y el script falla conSynergyError: Failed to initialize Synergy: Synergy not found, aunque Synergy esté técnicamente «abierto». Esto aplica a cualquier script que useSynergy(), no solo al de este ejemplo.
3. Paso a paso
Como ejemplo, usamos un script que automatiza una tarea común: cerrar el proyecto activo, borrar sus archivos .rfn, y reabrirlo. El procedimiento de ejecución es el mismo para cualquier script que uses contra la API.
python
import os
import sys
from moldflow import Synergy
def delete_files_with_extension(folder_path, file_extension):
if folder_path.endswith('\\'):
folder_path = folder_path[:-1]
for file_name in os.listdir(folder_path):
if file_name.lower().endswith('.' + file_extension.lower()):
file_path = os.path.join(folder_path, file_name)
os.remove(file_path)
def check_active_project(project):
if project is None:
sys.exit()
synergy = Synergy()
project = synergy.project
check_active_project(project)
project_path = project.path
project.close()
delete_files_with_extension(project_path, "rfn")
synergy.open_recent_project(0)
(Captura sugerida: archivo .py abierto en Notepad++ con resaltado de sintaxis Python)
- Escribe o pega tu script en un editor con soporte para Python (Notepad++ o VS Code).
- Guardalo con extensión
.py, verificando que el tipo de archivo quede en «Todos los archivos» si usás Notepad. - Si tu script usa
sys.exit()en algún punto, asegurate de tenerimport sysal principio, junto con los demás imports que necesite. - Abrí Moldflow Synergy (como administrador) y cargá el proyecto sobre el que va a trabajar el script.
- Si Synergy quedó abierto como administrador, abre también CMD como administrador (clic derecho > «Ejecutar como administrador»). Si Synergy es normal, CMD también debe ser normal — los dos tienen que coincidir.
- en CMD coloca la ruta en donde esta guardado el archivo .py (por ejemplo, yo almaceno los scripts en C:\Users\Lorena Rivas\Documents\My AMI 2027 Projects\scripts)
- Corré el script:
python nombre_script.py

4. Resultado esperado / cómo interpretarlo
Sin errores en consola: la terminal vuelve al prompt normal sin ningún traceback en rojo.
Comportamiento visible en Synergy: si tu script cierra y reabre el proyecto (como en el ejemplo), vas a ver la ventana de Synergy parpadear.
Verificación final: revisá el resultado esperado de tu script en particular (en el ejemplo, que la carpeta del proyecto ya no tenga archivos .rfn), ya que muchos scripts no imprimen ningún mensaje de confirmación por sí solos.
💡 Si quieres una confirmación explícita en pantalla en vez de ir a revisar manualmente, se le pueden agregar líneas print() al script en los puntos clave del proceso, como se observa el siguiente script
import os
import sys
from moldflow import Synergy
def delete_files_with_extension(folder_path, file_extension):
if folder_path.endswith('\\'):
folder_path = folder_path[:-1]
deleted_count = 0
for file_name in os.listdir(folder_path):
if file_name.lower().endswith('.' + file_extension.lower()):
file_path = os.path.join(folder_path, file_name)
os.remove(file_path)
deleted_count += 1
print(f"Borrado: {file_name}")
print(f"Total de archivos .{file_extension} borrados: {deleted_count}")
def check_active_project(project):
if project is None:
print("No hay ningún proyecto abierto en Synergy. Abrí un proyecto y volvé a correr el script.")
sys.exit()
print("Conectando con Synergy...")
synergy = Synergy()
project = synergy.project
check_active_project(project)
project_path = project.path
print(f"Proyecto activo encontrado en: {project_path}")
print("Cerrando el proyecto...")
project.close()
print("Borrando archivos .rfn...")
delete_files_with_extension(project_path, "rfn")
print("Reabriendo el proyecto...")
synergy.open_recent_project(0)
print("Listo. Proceso completado.")
5. Errores comunes al aplicarlo
| Error | Significado | Solución |
|---|---|---|
SyntaxError: unterminated string literal (detected at line 1) | Quedó una directiva de VBScript ('%RunPerInstance) al copiar un script viejo | Borrar esa primera línea; no aplica a Python |
moldflow.exceptions.SynergyError: Failed to initialize Synergy: Synergy not found | Synergy no está abierto, o Synergy y CMD corren en distinto nivel de permisos de Windows | Abrir Synergy con el proyecto cargado, e igualar el nivel de permisos (ambos como administrador, o ninguno) |
NameError: name 'sys' is not defined (u otro módulo) | El script usa una función de un módulo que no fue importado | Revisar que todos los import necesarios estén al principio del script |
| El script «no hace nada» | En realidad corrió bien, pero no tiene ningún print() que lo confirme | Verificar el resultado esperado directamente, o agregar mensajes de confirmación al script |
6. Fuente / referencia
- Experiencia propia validada, documentando la resolución en vivo de estos tres errores.
- Documentación oficial de Autodesk Moldflow API: https://autodesk.github.io/moldflow-api/latest/
- PyPI – paquete Moldflow: https://pypi.org/project/moldflow/


