Ausführen eines Python-Skripts von JSLIch möchte ein Python-Skript aus meinem JSL-Code ausführen. Wie geht das am besten? Danke
Betreff: Python-Skript von JSL ausführenUpdate: Seit JMP 14.0 (und in 15.0 stark verbessert) besteht die beste Möglichkeit, Python aus JSL auszuführen, jetzt darin, die JMP-Schnittstelle zu verwenden, die in den Befehlen Python Init(), Python Submit() usw. implementiert ist.
Weitere Informationen hier:
https://www.jmp.com/support/help/14-2/python-integration-functions.shtml
Suchen Sie nach einem Wrapper, der die Ausführung virtueller Anaconda-Umgebungen unterstützt:
https://community.jmp.com/t5/JMP-Scripts/Anaconda-Environments-Integration/ta-p/221565
Betreff: Python-Skript von JSL ausführenx = RunProgram(
executable( "/path/anaconda/bin/python" ),
options( "/path/filename.py" ),
readfunction( "blob" )
);
Um das Gegenteil zu erreichen, führen Sie JSL über ein Python-Skript aus.Dies funktioniert auf einem Mac, JMP 13.2 (und das ist Python, nicht JSL)
import os<BR />
os.system('open /Applications/JMP\ Pro\ 13.app/Contents/MacOS/JMP /path/script.jsl')
Das Argument open enthält den Anwendungspfad, ein Leerzeichen und dann den Pfad/die zu öffnende Datei.
Es ist wahrscheinlich wichtig, es zu haben
//!
in der ersten Zeile des Skripts, damit es automatisch ausgeführt wird. Und dann fügen Sie dies in die letzte Zeile ein
Quit();
Dadurch wird die JMP-Instanz geschlossen, die von os.sytem gestartet wurde.
Betreff: Python-Skript von JSL ausführenIch verwende den 64-Bit-ODBC-Treiber von Oracle für Oracle 11, um mit einer Oracle v12-Datenbank zu kommunizieren. Ich habe kein Verhalten gesehen, wie Sie es erwähnt haben. Ich habe dies für JMP 11 und 12 verwendet. Wir sind noch nicht vollständig auf JMP 13 umgestiegen; v13.1.0 hat einen Fehler behoben, bei dem V13.0 ein CLOB nicht lesen konnte.
Ich konnte den Oracle ODBC-Treiber von Microsoft übrigens nie zum Laufen bringen.
Viel Glück!
Betreff: Python-Skript von JSL ausführenIch verwende jetzt die ODBC-Treiber und sie sind nicht zuverlässig. Ich glaube nicht wirklich, dass es JMP ist, aber der Wechsel von JMP 12–13 und Oracle 11–12 hat den Applecart definitiv durcheinander gebracht. Ich weiß, dass die Datenbankverbindungen etwa alle fünf Abfragen geschlossen und wieder geöffnet werden müssen, damit alles zuverlässig läuft.
Betreff: Python-Skript von JSL ausführenMöglicherweise ist es einfacher und schneller, Daten mithilfe eines ODBC-Treibers direkt in JMP einzulesen. Was ist Ihre SQL-Datenbank? Ich habe viel Erfahrung mit Oracle und könnte dabei helfen.
Betreff: Python-Skript von JSL ausführenVerwenden
txt = runprogram( ... readfunction("text"));
Wenn das Python-Programm eine Standardausgabe (Druckanweisung usw.) erzeugt, wird diese als Ergebnis von runProgram an JSL zurückgegeben. JSL wird erst fortgesetzt, wenn das Python-Programm mit beendet wird Lesefunktion("Text") . Vielleicht möchten Sie so etwas ausdrucken
Dateiname.dat,100
So kann JSL erkennen, dass diese Datei 100 Datenzeilen enthält. Oder drucken Sie eine Fehlermeldung aus und behandeln Sie diese, wenn die Datenbank nicht verfügbar ist.
(JSL verfügt auch über einige SQL-Funktionen, die möglicherweise besser geeignet sind @Eric_Hill )
Betreff: Python-Skript von JSL ausführenCraig,
Danke, für die schnelle Antwort. Ich versuche, das anzurufen
Python-Programm und pausieren Sie die Ausführung der JSL, bis das Python-Programm ausgeführt wird
endet. Das Python-Programm schreibt seine Ausgabe in eine Datei, was ich tun würde
dann öffnen und über JSL abrufen. Ich versuche im Grunde, Python zu verwenden
Daten aus einer Datenbank zur Verwendung durch meinen JSL-Code abrufen. Die Reihenfolge sollte
Sei:
1. Führen Sie JSL aus und bereiten Sie die SQL-Abfrage vor. Diese wird dann zusammengeführt
Erstellen Sie das Python-Skript.
2. Führen Sie das Python-Programm aus und halten Sie die JSL an
3. Wenn der Python fertig ist, fährt die JSL fort und öffnet die Datei
Python hat es gespeichert und verarbeitet.
Betreff: Python-Skript von JSL ausführenreadFunction teilt RunProgram mit, wie es mit der Ausgabe Ihres Python-Programms (den nach stdout geschriebenen Daten) umgehen soll. Wenn Sie eine tatsächliche JSL-Funktion bereitstellen, kompiliert von Funktion Funktion verwenden, wie in Ihrem Beispiel, dann laufen JSL und Python unabhängig voneinander, und wenn JMP inaktiv ist, kann Ihre JSL-Funktion aufgerufen werden, um weitere Ausgaben von Python abzurufen. Dies kann nützlich sein, wenn das Python-Programm ewig läuft und einen unendlichen Ausgabestrom erzeugt. Das andere hier veröffentlichte Beispiel verwendet Lesefunktion("Text") Dies ist eine einfache Möglichkeit, die gesamte Ausgabe des Python-Programms zurückzugewinnen (das natürlich beendet werden muss). Die Ausgabe kommt als Ergebnis der runProgram-Funktion zurück.
Wenn Sie eine Funktion zum Aufrufen von runProgram bereitstellen, müssen Sie das runprogram-Objekt auch in einer JSL-Variablen behalten, damit die Verbindung zwischen JMP und Python nicht zu früh zerstört wird: obj = runProgram(...)
Der Das Der Parameter in der readFunction ist derselbe wie der obj Variable oben. Sie erhalten Zugriff auf die Methoden des runProgram-Objekts, z. B. <
Bearbeiten: Und die Ausgabe der Schreibfunktion geht an das JMP-Protokoll. Achten Sie darauf, dort nach Ihren Ergebnissen zu suchen.
Betreff: Python-Skript von JSL ausführenIch habe Probleme mit dem Befehl „Programm ausführen“. Die folgende Zeile funktioniert problemlos über eine Eingabeaufforderung:
c:\mycompany\anaconda3\python.exe „c:\users\myuserid\temp\pythonsqltest.py“
Ich versuche es auszuführen, indem ich dieses Skript ausführe:
Names Default To Here( 1 );
RP = RunProgram(
Executable( "c:\mycompany\anaconda3\python.EXE" ),
Options( {"c:\users\myuserid\temp\pythonsqltest.py"} ),
ReadFunction( Function( {this}, Write( this << read ) ) )
);
Ich glaube, ich verstehe die Rolle, die „ReadFunction“ hier spielt, nicht wirklich. Was vermisse ich?
Betreff: Python-Skript von JSL ausführenHier ist ein Beispiel, mit dem ich gespielt habe
txt=runprogram(executable("python"),options({"C:\Users\User\Desktop\tweepy\twpy2.py"}),readfunction("text"));
Tweepy ist ein Python-Paket für Twitter. In diesem Beispiel wird erwartet, dass das Python-Programm startet, eine Ausgabe erzeugt und beendet, bevor die JSL fortfährt. Es gibt andere Möglichkeiten, RunProgram zu verwenden.
Betreff: Python-Skript von JSL ausführenBenutzen Sie die
RunProgram()
Funktion.
Einzelheiten finden Sie unter:
Hilfe==>Scripting Indes==>RunProgram