Casi d'uso Python e/o situazioni di elaborazione batchCiao a tutti!
Abbiamo ricevuto domande su Python e problemi di conformità alle licenze (batch) con alcuni dei nostri clienti high tech che volevo condividere con la nostra community interna. Mi piacerebbe vedere questo thread trasformarsi in una discussione contenente non solo risposte alle mie domande, ma anche casi d'uso aggiuntivi (Python e batch) che tutti voi avete incontrato.
Nota: non sono un esperto di Python!
1) Chiamare JMP usando Python (rispetto a chiamare Python usando JMP). I nostri clienti vogliono farlo. Ho visto del materiale (non JMP) online che ne dimostra la fattibilità.
A) Esiste un caso d'uso accettabile in cui Python richiama JMP? A me sembra una situazione batch.
Se si tratta di una situazione batch, qualcuno ha una risposta tecnica preconfezionata che possiamo fornire ai nostri clienti? Ho sentito @Jeff_Perkinson dire "JMP non è stato progettato o testato per questo caso d'uso, quindi non possiamo garantire alcun lavoro svolto utilizzando JMP in questo modo" (sto parafrasando male, scusa Jeff!).
2) JMP supporta la libreria Python Pandas? Ho visto un post di @IkjuShin su questo argomento del 2018 e mi chiedo se è stato prodotto altro materiale qui o se altri SE hanno riscontrato questa domanda.
Ho trovato questo esempio nella guida allo scripting JMP, il che mi porta a credere che questo sia un caso d'uso fattibile per gli integratori JMP/Python.
3) Un cliente vorrebbe creare uno script JSL contenente un ciclo While per l'esecuzione continua. Lo script verrebbe eseguito su un computer che è essenzialmente dedicato all'esecuzione di JMP. L'utente avvierebbe l'esecuzione dello script (e, teoricamente, la terminerebbe). Non ho ulteriori dettagli sul caso d'uso ma, dato il contesto della conversazione, immagino che questo script effettuerebbe il ping di un database per nuovi dati e aggiornerebbe i report.
A) Ciò è conforme al nostro contratto di licenza desktop?
Questa soluzione è stata testata e/o quali sono gli ostacoli tecnici alla sua implementazione in modo affidabile?
Post lungo...grazie per l'ascolto e per i vostri contributi!
Re: Casi d'uso Python e/o situazioni di elaborazione batchGrazie Martin. Ci sono un sacco di buoni contenuti qui, alcuni dei quali sono al di sopra della mia testa! Dovrò rileggerli un paio di volte.
Re: Casi d'uso Python e/o situazioni di elaborazione batchCiao Jeff,
UN.
Penso che questo PDF sarà un ottimo riferimento, anche se del 2009 (https://www.lexjansen.com/nesug/nesug09/ap/AP09.pdf), l'ho allegato anch'io.
Fa riferimento ad alcuni linguaggi di scripting e alle loro chiamate:
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.
Anche questo sembra essere correlato (da una pagina Python): https://stackoverflow.com/questions/17931476/how-to-call-a-jsl-script-from-python-script
Su un Mac veniva menzionato:
import os
os.system('open /Applications/JMP\ Pro\ 13.app/Contents/MacOS/JMP /path/filename.jsl')
c'è uno spazio tra il percorso/eseguibile e il percorso/nome.
Nel tuo JSL assicurati che la prima riga abbia solo //! Questo farà sì che lo script venga eseguito automaticamente quando viene aperto. Inoltre, usa quit(); come ultima riga, in questo modo l'istanza di JMP che viene aperta viene chiusa.
Nota anche: assicurati che jmp.exe sia disponibile nel tuo ambiente di sistema in modo che se digiti "jmp.exe" nella riga di comando, avvii jmp. Quindi tieni pronto il tuo *.jsl. usa python procees per eseguire questo comando "jmp.exe *.jsl" e questo aprirà jmp ed eseguirà lo script *.jsl e poi potrai importare tutto ciò che generi da jmp di nuovo in python.
E c'è un altro thread Python che parla di come chiamare altre app da Python: https://stackoverflow.com/questions/247724/how-can-i-launch-an-instance-of-an-application-using-python
Potrebbe interessarti anche questo thread della community: https://community.jmp.com/t5/Discussions/jsl-Script-call-from-Python/mp/206295#M41799
C.
Infine, il riferimento all'automazione (http://www.jmp.com/support/downloads/pdf/jmp1001/automation_reference.pdf) mostra come usare l'automazione OLE. Oppure http://www.jmp.com/support/downloads/pdf/vb_automation_reference.pdf
Non l'ho ancora provato, né ho visto nessuno nella mia base di clienti. Quello che ho visto finora è il caso d'uso di creazione di un modello in JMP, conversione di quello finale in uno script python e utilizzo di quest'ultimo in un'interfaccia web basata su python. Il caso d'uso era la pianificazione delle risorse in un ambiente automobilistico per nuovi progetti. Il modello ha funzionato molto meglio delle raccomandazioni del project lead. Tuttavia, questo potrebbe anche ridurre la quantità di utenti che hanno bisogno di JMP Pro, se gli altri possono contare sul modello di build. Ma questo è sempre possibile se hai clienti con un gruppo di analisi 