[Résolu]-[Python]-Erreur d'exécution.

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

[Résolu]-[Python]-Erreur d'exécution.

Message par Ernest »

Bonsoir,
Suite à un plantage de mon nouveau PC, j' ai du tout réinstaller. J' avais deux modules python et visiblement je n' ai pas du les replacer au bon endroit.
Ces deux modules appelmodule.py et slcpht.py sont dans le répertoire :
/home/elfouste/.config/libreoffice/4/user/Scripts/python
Lorsque je lance les scripts depuis Libre office Base, j' ai le message suivant:
"Erreur d' exécution basic
Une exception c' est produite:
Type: com.sun.star.uno.RuntimeException
Message: Error during function slcpht in module file:///
home/elfouste/.config/libreoffice/4/user/Scripts/python/
appelmodule.py(<class 'TypeError'>: 'module' object is not callable
File "/opt/libreoffice6.2/program/pythonscript.py", line 920, in
invoke
ret = self.func(*args).)
Si cela peut aider, je joins les deux scripts:
AppelModule

Code : Tout sélectionner

#!/usr/bin/env python3

from uno import *
from sys import *
from os import chdir
import csv
import slcpht

def slcfch(event):
    ctx = XSCRIPTCONTEXT.getComponentContext()
    fchslc = slcpht.fntslc(ctx)
SlcPht:

Code : Tout sélectionner

#!/usr/bin/env python3

from exiftool import *
from os import chdir
from datetime import datetime
from fractions import Fraction

fchslc = ' '; chmcmppht = ' '; marque = ' '

def fntslc(ctx):
    create = ctx.ServiceManager.createInstance
    dsr = create("com.sun.star.ui.dialogs.OfficeFilePicker")
    dsr.setDisplayDirectory("file:///media/elfouste/El_Casot/Yvon/Phototeque1/A_Trier/")
    dsr.execute()
    #global fchslc
    fchslc = dsr.Files[0]

    # Chemin complet du fichier
    #global chmcmppht
    bls = '/'
    pstbls = fchslc.rfind(bls,0,10)
    chmcmppht = fchslc[pstbls:]

    # Chemin du fichier
    xbls = chmcmppht.count(bls)
    i = 0
    while i <= xbls:
        pstbls1 = chmcmppht.rfind(bls)
        i = i + 1
    chmpht = chmcmppht[:pstbls1]

    # Nom de la photo
    bls2 = '.'
    pstbls2 = chmcmppht.rfind(bls2)
    nmpht = chmcmppht[pstbls1 + 1:pstbls2]

    # Récupération des données exif
    with ExifTool() as e:
        marque = e.get_tag('Make', chmcmppht)
    if marque == None:
        print ("Il n' y a pas de données exif pour cette photographie !")
        marque = 'Inconnue'; xtnpht = 'Inconnue'; mdl = 'Inconnue'; dtpht = 'Inconnue'; hrpht = 'Inconnue'
        dmspht = 'Inconnue'; tmpxps = 'Inconnue'; fcl = 'Inconnue'; lngfcl = 'Inconnue'
        iso = 'Inconnue'; vrtbjc = 'Inconnue'; lmn = 'Inconnue'; flash = 'Inconnue'
        bjc = 'Inconnue'
    elif marque == 'Canon':
        with ExifTool() as e:
            xtnpht = e.get_tag('FileTypeExtension', chmcmppht)
            vlrmdl = e.get_tag('Model', chmcmppht)
            bjc = e.get_tag('LensType', chmcmppht)
            dtcrt = e.get_tag('DateTimeOriginal', chmcmppht)
            lrg = e.get_tag('ImageWidth', chmcmppht)
            htr = e.get_tag('ImageHeight', chmcmppht)
            xps = e.get_tag('ExposureTime', chmcmppht)
            vlrfcl = e.get_tag('FNumber', chmcmppht)
            vlrlngfcl = e.get_tag('FocalLength', chmcmppht)
            iso = e.get_tag('Iso', chmcmppht)
            vlrlmn = e.get_tag('LightValue', chmcmppht)
            pstflash = e.get_tag('Flash', chmcmppht)
    elif marque == 'FUJIFILM':
        with ExifTool() as e:
            xtnpht = e.get_tag('FileTypeExtension', chmcmppht)
            vlrmdl = e.get_tag('Model', chmcmppht)
            bjc = e.get_tag('LensType', chmcmppht)
            dtcrt = e.get_tag('DateTimeOriginal', chmcmppht)
            lrg = e.get_tag('ImageWidth', chmcmppht)
            htr = e.get_tag('ImageHeight', chmcmppht)
            xps = e.get_tag('ExposureTime', chmcmppht)
            vlrfcl = e.get_tag('FNumber', chmcmppht)
            vlrlngfcl = e.get_tag('FocalLength', chmcmppht)
            iso = e.get_tag('Iso', chmcmppht)
            vlrlmn = e.get_tag('LightValue', chmcmppht)
            pstflash = e.get_tag('Flash', chmcmppht)
    else:
        with ExifTool() as e:
            xtnpht = e.get_tag('FileTypeExtension', chmcmppht)
            vlrmdl = e.get_tag('Model', chmcmppht)
            bjc = e.get_tag('LensType', chmcmppht)
            dtcrt = e.get_tag('DateTimeOriginal', chmcmppht)
            lrg = e.get_tag('ImageWidth', chmcmppht)
            htr = e.get_tag('ImageHeight', chmcmppht)
            xps = e.get_tag('ExposureTime', chmcmppht)
            vlrfcl = e.get_tag('FNumber', chmcmppht)
            vlrlngfcl = e.get_tag('FocalLength', chmcmppht)
            iso = e.get_tag('Iso', chmcmppht)
            vlrlmn = e.get_tag('LightValue', chmcmppht)
            pstflash = e.get_tag('Flash', chmcmppht)

    # Clé du fichier
    cfpht = 1

    # Nom de l' appareil photo
    bls3 = ' E '
    if marque == 'Canon':
        pstbls3 = fchslc.rfind(bls3)
        mdl = vlrmdl[6:len(vlrmdl)]
    elif marque == 'FUJIFILM':
        mdl = vlrmdl
    else:
        mdl = 'Inconnu'

    # Type d' objectif utilisé
    if bjc == 53:
        tpbjc = 'Canon EF-S 18-55mm f/3.5-5.6 III'
    elif bjc == 45:
        tpbjc = 'Canon EF-S 18-55mm f/3.5-5.6 [II]'
    elif bjc == 39:
        tpbjc = 'Canon EF 75-300mm f/4-5.6'
    else:
        tpbjc = 'Inconnu'

    # Extraction de la date et de l' heure de prise de vue
    dt = datetime.strptime(dtcrt,"%Y:%m:%d %H:%M:%S")
    dtpht = dt.strftime('%d-%m-%Y')
    hrpht = dt.strftime('%H:%M:%S')

    # Dimension de la photo
    dmspht = '%s*%s' % (lrg, htr)

    # Temps d' exposition
    x = Fraction(xps).limit_denominator(1000)
    nmr = x.numerator
    dnm = x.denominator
    tmpxps = '%s/%s' % (nmr, dnm)

    # Valeur de focale
    fcl = 'f '+ str(round(vlrfcl, 1))
    
    # Longueur de focale
    lngfcl = str(vlrlngfcl)+ ' mm'

    # Valeur de luminosité
    lmn = round(vlrlmn,1)

    # Valeur de flash
    if pstflash == 16:
        pstfls = 'Inactif'
    else:
        pstfls = 'Actif'

    #Sauvegarde des données exif
    chdir('/home/elfouste/Documents/Python/Svg_Csv')
    with open('DnExif.csv', 'w') as f:
        f.write('Cf_Pht'); f.write(','); f.write('ChmPht'); f.write(','); f.write('NmPht')
        f.write(','); f.write('XtnPht'); f.write(','); f.write('Fbc'); f.write(',')
        f.write('MdlApp'); f.write(','); f.write('Bjc'); f.write(','); f.write('DtPht')
        f.write(','); f.write('HrPht'); f.write(','); f.write('DmsPht')
        f.write(','); f.write('TmpXps'); f.write(','); f.write('Fcl')
        f.write(','); f.write('LngFcl'); f.write(','); f.write('Sns')
        f.write(','); f.write('Lmn'); f.write(','); f.write('PstFlsh')
        f.write(','); f.write('ChmCmpPht')
        f.write('\n')
        f.write(str(cfpht)); f.write(','); f.write(chmpht); f.write(','); f.write(nmpht)
        f.write(','); f.write(xtnpht); f.write(','); f.write(marque); f.write(',')
        f.write(mdl); f.write(','); f.write(tpbjc); f.write(','); f.write(str(dtpht))
        f.write(','); f.write(str(hrpht)); f.write(','); f.write(dmspht);f.write(',')
        f.write(str(tmpxps)); f.write(','); f.write(fcl);f.write(','); f.write(lngfcl)
        f.write(','); f.write(str(iso)); f.write(','); f.write(str(lmn));f.write(',')
        f.write(pstfls); f.write(','); f.write(chmcmppht)
Merci de votre aide.
Dernière modification par Ernest le 18 nov. 2019 21:16, modifié 1 fois.
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Python]-Erreur d'exécution.

Message par joel275 »

Bonsoir,
j'avoue ne pas bien comprendre :?:
ton message d'erreur parle de fonction slcpht dans appelmodule et toi de module SlcPht alors que tu ne montres aucune fonction de ce nom dans ce module.

D'autre part, tu fais des import *, ce qui est la meilleur façon d'avoir des conflits de noms d'un module à l'autre.

Pour savoir où mettre les modules python, regarde ici: https://forum.openoffice.org/fr/forum/v ... 45#p288141

A plus.
Dernière modification par joel275 le 18 nov. 2019 20:45, modifié 1 fois.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9255
Inscription : 28 août 2010 08:45

Re: [Python]-Erreur d'exécution.

Message par micmac »

Bonjour,
[b][color=#404080]Ernest[/color][/b] a écrit :plantage de mon nouveau PC
Et dans cette nouvelle machine vous avez conservé ?
ce que dans votre signature il y a écrit :OpenOffice 4.1.2 LibreOffice 6-2-8-2 Windows 8.1
Accès direct à votre signature pour la corriger.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Ernest
Membre hOOnoraire
Membre hOOnoraire
Messages : 143
Inscription : 26 févr. 2019 14:56

Re: [Python]-Erreur d'exécution.

Message par Ernest »

Bonsoir MicMac.
Je ne comprends pas d' ou sort ce Win 8.1 car je ne l' ai pas retrouvé. A votre demande, j' ai modifié le profil en précisant:
Xubuntu en dual boot Win10
LibreOffice Base 6.2.8
Ceci dit, j' ai trouvé la solution au problème. Je lance le deuxième module en direct sans passé par "appelmodule.py".
Il n' y a plus d' erreur.
Bonne soirée
Xubuntu 20.04 en dual boot avec Win10
Libre Office 7.06