banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 26 October 2015 22:20

Martin Tov
Juste Inscrit !
Lieu: Grenoble
Date d'inscription: 5 Jan 2013
Messages: 6

PL/Python : Appel d'un script Python à partir d'une fonction

Je tente d'appeler un script Python à partir d'une fonction PostgreSQL écrite en PL/Python.

Mon intuition m'a amené à coder quelque chose comme ça:

Code:

CREATE OR REPLACE FUNCTION foo() Returns boolean AS
$$
import subprocess
cmd = "C:\\Python27\\python.exe" 
file_to_execute = "C:\\Users\\manager_gui.py"
subprocess.check_call([cmd, file_to_execute])
$$
LANGUAGE 'plpython3u' VOLATILE;

Mais quand j'exécute

Code:

SELECT foo()

il m'est renvoyé ce message d'erreur :

Code:

Command '['C:\\Python27\\python.exe', 'C:\\Users\\manager_gui.py']' returned non-zero exit status 2

Je l'ai googlé et visiblement il s'agit d'un problème de droit d'exécution du script. Mais je ne suis pas vraiment sûr...

Est-il vraiment possible de faire ce genre d'appel avec une fonction PL/Python, et est-ce que je me plante quelque part?
Et si c'est un histoire de permission sur le fichier comment est-ce que pourrait m'en sortir avec ça?

Merci par avance,

Martin

Hors ligne

 

#2 Thu 29 October 2015 16:29

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1230
Site web

Re: PL/Python : Appel d'un script Python à partir d'une fonction

Bonjour Martin,

oui on peut appeler des commandes externes depuis un une fonction plpythonu

Voici une fonction créée pour redimensionner les images dont le chemin est stocké en base avec image magick :

Code:

CREATE OR REPLACE FUNCTION outils.redim_image(
    input character varying,
    size character varying)
  RETURNS text AS
$BODY$
    import subprocess
    temp = input + '_temp'
    subprocess.call(["mv", '-f', input, temp])
    subprocess.call(["convert", temp, "-resize" , size, input])
    subprocess.call(["rm", '-f', temp])
    return 'ok'
$BODY$
  LANGUAGE plpythonu;

Ton erreur semble être une erreur strictement python... et là ça me dépasse.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Fri 30 October 2015 10:11

Martin Tov
Juste Inscrit !
Lieu: Grenoble
Date d'inscription: 5 Jan 2013
Messages: 6

Re: PL/Python : Appel d'un script Python à partir d'une fonction

Merci pour ton retour documenté Mathieu, au moins je sais que c'est possible, c'est déjà l'essentiel!

Je vais fouiller un peu plus du côté du code Python. Je me demande si c'est pas peut être un souci de portabilité du code, vu que j'appelle un script en Python2.7 avec une fonction en Python3, je sais pas si c'est possible.

Hors ligne

 

#4 Fri 30 October 2015 10:48

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: PL/Python : Appel d'un script Python à partir d'une fonction

Bonjour,

Je suis étonné que tu veuilles lancer quelques choses en "...gui...." Donc avec une interface graphique ???

Par rapport à ton problème de script python... Est-ce que ton serveur PostgreSQL est en local et est sous Windows ?
Parce que lorsque les scripts s'executent cela s'effectue dans l'environnement du serveur et non pas du client ...

Cordialement

Hors ligne

 

Pied de page des forums

Powered by FluxBB