Casos de uso de Python y/o situaciones de procesamiento por lotes¡Hola, equipo!
Hemos estado encontrando preguntas sobre Python y problemas de cumplimiento de licencias (por lotes) con algunos de nuestros clientes de alta tecnología que quería compartir dentro de nuestra comunidad interna. Me encantaría ver que este hilo se convierta en una discusión que contenga no solo respuestas a mis preguntas, sino también casos de uso adicionales (Python y por lotes) que todos ustedes han encontrado.
Nota: ¡No soy un experto en Python!
1) Llamar a JMP con Python (en lugar de llamar a Python con JMP). Nuestros clientes quieren hacer esto. He visto material (no relacionado con JMP) en Internet que demuestra su viabilidad.
A) ¿Existe un caso de uso aceptable en el que Python invoque JMP? A mí me parece que se trata de una situación de procesamiento por lotes.
Si se trata de una situación de lotes, ¿alguien tiene una respuesta técnica enlatada que podamos brindarles a nuestros clientes? Escuché a @Jeff_Perkinson decir "JMP no fue diseñado ni probado para este caso de uso, por lo que no podemos garantizar ningún trabajo realizado con JMP de esta manera" (estoy parafraseando mal, ¡lo siento Jeff!).
2) ¿JMP es compatible con la biblioteca Python de Pandas? Vi una publicación de @IkjuShin sobre esto en 2018 y me pregunto si se ha producido material adicional aquí o si otros SE se han encontrado con esta pregunta.
Encontré este ejemplo en la guía de scripts de JMP, lo que me lleva a creer que este es un caso de uso factible para los integradores de JMP/Python.
3) Un cliente desea crear un script JSL que contenga un bucle While para su ejecución continua. El script se ejecutaría en una computadora que se dedica esencialmente a ejecutar JMP. El usuario iniciaría la ejecución del script (y, en teoría, lo finalizaría). No tengo más detalles sobre el caso de uso, pero, dado el contexto de la conversación, imagino que este script estaría haciendo ping a una base de datos para obtener nuevos datos y actualizar informes.
A) ¿Esto cumple con nuestro acuerdo de licencia de escritorio?
¿Se ha probado esto y/o cuáles son los obstáculos técnicos para implementarlo de manera confiable?
Publicación larga... ¡gracias por sintonizarnos y por sus contribuciones!
Re: Casos de uso de Python y/o situaciones de procesamiento por lotesGracias, Martin. Hay mucho contenido interesante aquí, ¡y parte de él me supera! Tendré que volver a leerlo varias veces.
Re: Casos de uso de Python y/o situaciones de procesamiento por lotesHola jeff,
A.
Creo que este PDF será una muy buena referencia, aunque a partir de 2009 (https://www.lexjansen.com/nesug/nesug09/ap/AP09.pdf), lo he adjuntado también.
Hace referencia a algunos lenguajes de script y sus llamadas:
COMPARE & CONTRAST
COM Syntax across scripting tools is more alike than different across: Tcl, Perl , Python, R, & VBScript. For example: Start up JMP, Open a Document, Launch a Platform, Run some JSL.
TCL:
package require tcom
set JMP [::tcom::ref createobject "JMP.Application"];
set JMPdoc [$JMP OpenDocument {C:\Big Class.JMP}]
set oneway [$JMPdoc CreateOneway]
$JMP RunCommand "Distribution(
Perl:
use OLE;
use Win32::OLE;
$jmp = Win32::OLE->new('JMP.Application')
my $doc = $jmp->OpenDocument("C:\\Big class.jmp");
$doc -> CreateOneway
$jmp->RunCommand("Distribution(…
Python:
from win32com.client import Dispatch
jmp = Dispatch("JMP.Application")
doc = jmp.OpenDocument("C:/Big class.jmp")
doc.CreateOneway
jmp.RunCommand("Distribution(…
R:
library(rcom)
jmp <- comCreateObject("JMP.Application")
bigclass <- comInvoke(jmp, "OpenDocument", "C:\\Big Class.jmp")
oneway <- comInvoke(bigclass, "CreateOneway")
comInvoke(jmp, "RunCommand",…
VBscript:
set jmp = Wscript.CreateObject("JMP.Application")
set jmpdoc = jmp.OpenDocument("C:/Big class.jmp")
Set Oneway = JMPDoc.CreateOneway
jmp.RunCommand("Distribution(…
B.
Esto también parece estar relacionado (de una página de Python): https://stackoverflow.com/questions/17931476/how-to-call-a-jsl-script-from-python-script
En una Mac mencionaba:
import os
os.system('open /Applications/JMP\ Pro\ 13.app/Contents/MacOS/JMP /path/filename.jsl')
Hay un espacio entre la ruta/ejecutable y la ruta/nombre.
En su JSL, asegúrese de que la primera línea solo tenga //! Esto hará que el script se ejecute automáticamente cuando se abra. Además, use quit(); como última línea, de esa manera se cerrará la instancia de JMP que se abre.
También tenga en cuenta: asegúrese de que jmp.exe esté disponible en el entorno de su sistema de modo que, si escribe "jmp.exe" en la línea de comandos, se inicie jmp. Luego, tenga listo su *.jsl. Use los procedimientos de Python para ejecutar este comando "jmp.exe *.jsl" y eso abrirá jmp y ejecutará el script *.jsl y luego podrá importar lo que genere desde jmp nuevamente a Python.
Y hay otro hilo de Python que habla sobre llamar a otras aplicaciones desde Python: https://stackoverflow.com/questions/247724/how-can-i-launch-an-instance-of-an-application-using-python
Este hilo de la comunidad también podría ser de interés: https://community.jmp.com/t5/Discussions/jsl-Script-call-from-Python/mp/206295#M41799
DO.
Finalmente, la referencia de automatización (http://www.jmp.com/support/downloads/pdf/jmp1001/automation_reference.pdf) muestra cómo utilizar la automatización OLE. O http://www.jmp.com/support/downloads/pdf/vb_automation_reference.pdf
Aún no lo he probado, ni he visto a nadie en mi base de clientes. Lo que he visto hasta ahora es el caso de uso de crear un modelo en JMP, convertir el modelo final en un script de Python y usarlo en una interfaz web basada en Python. El caso de uso fue la planificación de recursos en un entorno automotriz para nuevos proyectos. El modelo funcionó mucho mejor que las recomendaciones del líder del proyecto. Sin embargo, esto también podría reducir la cantidad de usuarios que necesitan tener JMP Pro, si los demás pueden confiar en el modelo de creación. Pero esto siempre es posible si tienes clientes con un grupo de análisis 