Exécuter un script Python à partir de JSLJe souhaite exécuter un script Python à partir de mon code JSL. Quelle est la meilleure façon de le faire? Merci
Re : Exécuter un script Python à partir de JSLMise à jour : depuis JMP 14.0 (et bien amélioré en 15.0), la meilleure façon d'exécuter Python à partir de JSL est désormais d'utiliser l'interface JMP implémentée dans les commandes Python Init(), Python Submit(), etc.
Plus d'informations ici :
https://www.jmp.com/support/help/14-2/python-integration-functions.shtml
Pour un wrapper prenant en charge l'exécution des environnements virtuels Anaconda, vérifiez :
https://community.jmp.com/t5/JMP-Scripts/Anaconda-Environments-Integration/ta-p/221565
Re : Exécuter un script Python à partir de JSLx = RunProgram(
executable( "/path/anaconda/bin/python" ),
options( "/path/filename.py" ),
readfunction( "blob" )
);
Ensuite, pour faire l'inverse, exécutez JSL à partir d'un script python.Cela fonctionne sur un Mac, JMP 13.2 (et c'est du python et non du jsl)
import os<BR />
os.system('open /Applications/JMP\ Pro\ 13.app/Contents/MacOS/JMP /path/script.jsl')
l'argument open a le chemin de l'application, un espace puis le chemin/fichier à ouvrir.
Il est probablement important d'avoir
//!
sur la première ligne du script pour qu'il s'exécute automatiquement. Et puis sur la dernière ligne, incluez ceci
Quit();
Cela fermera l'instance de JMP démarrée par os.sytem.
Re : Exécuter un script Python à partir de JSLJ'utilise le pilote ODBC 64 bits d'Oracle pour Oracle 11 pour communiquer avec une base de données Oracle v12. Je n'ai vu aucun comportement comme vous l'avez mentionné. Je l'ai utilisé pour JMP 11 et 12. Nous n'avons pas encore complètement migré vers JMP 13 ; La v13.1.0 a corrigé un bug où la V13.0 ne pouvait pas lire un CLOB.
Je n'ai jamais pu faire fonctionner le pilote Oracle ODBC de Microsoft.
Bonne chance!
Re : Exécuter un script Python à partir de JSLJ'utilise maintenant les pilotes ODBC et ils ne sont pas fiables. Je ne pense pas vraiment que ce soit JMP, mais le passage de JMP 12-13 et d'Oracle 11-12 a définitivement bouleversé l'applecart. Je sais que je dois fermer et rouvrir les connexions à la base de données toutes les cinq requêtes environ pour que les choses fonctionnent de manière fiable.
Re : Exécuter un script Python à partir de JSLIl pourrait être plus simple et plus rapide de lire les données directement dans JMP à l'aide d'un pilote ODBC. Quelle est votre base de données SQL ? J'ai beaucoup d'expérience avec Oracle et je pourrais vous aider.
Re : Exécuter un script Python à partir de JSLUtiliser
txt = runprogram( ... readfunction("texte"));
Si le programme python produit une sortie standard (instruction d'impression, etc.), il reviendra à JSL à la suite de runProgram. JSL ne continuera pas tant que le programme Python ne se terminera pas avec fonction de lecture("texte") . Vous voudrez peut-être imprimer quelque chose comme
nom de fichier.dat,100
afin que JSL puisse savoir qu'il y a 100 lignes de données dans ce fichier. Ou imprimez un message d'erreur et gérez-le si la base de données n'est pas disponible.
(JSL possède également certaines fonctionnalités SQL qui pourraient être plus appropriées @Eric_Hill )
Re : Exécuter un script Python à partir de JSLCraig,
Merci pour votre réponse rapide. Ce que j'essaie de faire, c'est d'appeler le
programme python et suspendez l'exécution du JSL jusqu'à ce que le programme python
se termine. Le programme python écrit sa sortie dans un fichier que je voudrais
puis ouvrez et récupérez via JSL. J'essaie essentiellement d'utiliser Python pour
récupérer les données d'une base de données pour les utiliser par mon code JSL. La séquence devrait
être:
1. Exécutez JSL et préparez la requête SQL, celle-ci est ensuite rassemblée pour
créez le script python.
2. Exécutez le programme python et mettez le JSL en pause
3. Lorsque le python termine, le JSL continue, ouvrant le fichier
python enregistré et traité.
Re : Exécuter un script Python à partir de JSLreadFunction indique à RunProgram comment gérer la sortie de votre programme Python (les données écrites sur la sortie standard). Si vous fournissez une fonction JSL réelle, compilée par le fonction fonction, comme dans votre exemple, alors JSL et python s'exécutent indépendamment et chaque fois que JMP est inactif, votre fonction JSL peut être appelée pour récupérer un peu plus de sortie de python. Cela peut être utile si le programme python s'exécute indéfiniment et génère un flux de sortie infini. L'autre exemple publié ici utilise fonction de lecture("texte") , qui est un moyen simple de récupérer toutes les sorties du programme python (qui doit bien sûr se terminer). La sortie revient comme le résultat de la fonction runProgram.
Si vous fournissez une fonction à appeler par runProgram, vous devez également conserver l'objet runprogram dans une variable JSL afin que la connexion entre JMP et Python ne soit pas détruite trop tôt : obj = exécuterProgramme(...)
Le ce Le paramètre dans readFunction est le même que le obj variable ci-dessus. Il vous donne accès aux méthodes de l'objet runProgram, comme <
edit : Et la sortie de la fonction d'écriture va dans le journal JMP ; assurez-vous d'y chercher vos résultats.
Re : Exécuter un script Python à partir de JSLJ'ai du mal avec la commande "Exécuter le programme". La ligne ci-dessous fonctionne correctement depuis une invite de commande :
c:\mycompany\anaconda3\python.exe "c:\users\myuserid\temp\pythonsqltest.py"
J'essaie de l'exécuter en exécutant ce script :
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 ) ) )
);
Je pense que je ne comprends pas vraiment le rôle que joue « ReadFunction » ici. Qu'est-ce que je rate?
Re : Exécuter un script Python à partir de JSLVoici un exemple avec lequel je jouais
txt=runprogram(executable("python"),options({"C:\Users\User\Desktop\tweepy\twpy2.py"}),readfunction("text"));
Tweepy est un package python pour Twitter. Cet exemple s'attend à ce que le programme python démarre, produise une sortie et se termine avant que le JSL ne continue. Il existe d'autres façons d'utiliser RunProgram.
Re : Exécuter un script Python à partir de JSLUtilisez le
Exécuter de programme()
fonction.
Pour plus de détails, allez à :
Aide==>Scripting Indes==>RunProgram