[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 !

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

Messagepar Ernest » 17 Nov 2019 17:54

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   AgrandirRéduire
#!/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   AgrandirRéduire
#!/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 édition par Ernest le 18 Nov 2019 22:16, édité 1 fois.
Xubuntu 18.04 en dual boot avec Win10
Libre Office 6.2.8
Avatar de l’utilisateur
Ernest
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 73
Inscrit le : 26 Fév 2019 15:56

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

Messagepar joel275 » 18 Nov 2019 21:33

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: viewtopic.php?f=37&t=53131&p=288145#p288141

A plus.
Dernière édition par joel275 le 18 Nov 2019 21:45, édité 1 fois.
OpenOffice 4.1.2 LibreOffice 6-2-8-2 Windows 8.1
joel275
PassiOOnné
PassiOOnné
 
Message(s) : 742
Inscrit le : 10 Jan 2009 09:05

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

Messagepar micmac » 18 Nov 2019 21:45

Bonjour,
Ernest 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.
Les formats ouverts (ODF) assurent la pérennité de vos documents.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 6299
Inscrit le : 28 Août 2010 09:45

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

Messagepar Ernest » 18 Nov 2019 22:15

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 18.04 en dual boot avec Win10
Libre Office 6.2.8
Avatar de l’utilisateur
Ernest
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 73
Inscrit le : 26 Fév 2019 15:56


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)