Publié le :
Macro CREATION_INTERNE

Exécution de code Python 3.10 via Macro SAS

Attention : Ce code nécessite des droits administrateur.
Cette macro 'utl_submit_py64_310x' accepte une suite de commandes Python séparées par des points-virgules. Elle génère un fichier script Python temporaire dans le répertoire WORK, l'exécute via une commande système (pointant vers une installation Windows spécifique de Python 3.10), et capture les flux de sortie (stdout) et d'erreur (stderr) pour les afficher dans SAS©. Elle inclut une fonctionnalité pour récupérer une valeur de retour via le presse-papiers système.
Analyse des données

Type : CREATION_INTERNE


Le code Python est généré dynamiquement à partir des paramètres de la macro. Aucune table SAS externe n'est consommée.

1 Bloc de code
MACRO PREPARATION
Explication :
Déclaration des variables locales et nettoyage des fichiers temporaires (script python, logs stdout/stderr) via une appel à une macro externe '%utlfkil'.
Copié !
1%local LENGTH ...; %utlfkil(...);
2 Bloc de code
DATA STEP
Explication :
Parsing de la chaîne de commande d'entrée : résolution des macro-variables, découpage par point-virgule, et écriture des instructions dans le fichier physique '.py'.
Copié !
1 
2DATA _null_;
3file py_pgm;
4... pgm=trim(resolve(&pgm));
5... put cmd ...;
6 
7RUN;
8 
3 Bloc de code
FILENAME PIPE
Explication :
Définition d'un canal (pipe) pour exécuter le script Python via l'interpréteur système (chemin Windows codé en dur) et redirection des erreurs vers un fichier.
Copié !
1filename rut pipe "d:\Python310\python.exe &_loc 2> &_stderr";
2 
4 Bloc de code
DATA STEP
Explication :
Exécution du pipe, lecture du flux de sortie standard (stdout) généré par Python et affichage dans la fenêtre de sortie SAS.
Copié !
1 
2DATA _null_;
3file PRINT;
4INFILE rut;
5... put _infile_;
6 
7RUN;
8 
5 Bloc de code
DATA STEP
Explication :
Lecture et affichage du contenu du fichier de capture des erreurs (stderr) si elles existent.
Copié !
1 
2DATA _null_;
3INFILE "%sysfunc(pathname(work))/stderr.txt";
4... put _infile_;
5 
6RUN;
7 
6 Bloc de code
DATA STEP
Explication :
Utilisation du moteur 'clipbrd' (spécifique Windows) pour lire le contenu du presse-papiers et le stocker dans la macro-variable de retour demandée.
Copié !
1filename clp clipbrd;
2 
3DATA _null_;
4INFILE clp;
5... call symputx(...);
6 
7RUN;
8 
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.