Je rencontre un gros problème dans le développement d' une macro Python. En effet, alors que depuis une console Linux, la macro fonctionne bien, elle plante systématiquement lorsque je la lance depuis un formulaire LO base.
Lorsque je lance la macro depuis une console, fchslc contient le chemin d' une photo.
La sélection d' une photo depuis le formulaire LO Base fonctionne aussi puisque, je peux extraire le chemin de la photo, son nom ainsi que l' extension du fichier depuis la variable fchslc.
Par contre dès que je tente d' extraire les données exif, c' est le blocage.
Voici le code de la macro:
Code : Tout sélectionner
#!/usr/bin/env python3
from uno import *
from exiftool import *
from datetime import datetime
from fractions import *
from sys import *
from os import chdir
# Sélectionner une photographie
fchslc = ' '
def fntslc(event=None):
ctx = XSCRIPTCONTEXT.getComponentContext()
create = ctx.ServiceManager.createInstance
filepicker = create("com.sun.star.ui.dialogs.FilePicker")
filepicker.execute()
global fchslc
fchslc = filepicker.Files[0]
dmspht = ' '; dtpht = ' ';hrpht = ' '; exp = ' '; vrtbjc = ' ';flash = ' '
def dnxf():
# Dimension de la photo
global dmpht
dmspht = lrg, ' x ',htr
# Extraction de la date et de l' heure de prise de vue
dt = datetime.strptime(dtcrt,"%Y:%m:%d %H:%M:%S")
global dtpht; global hrpht
dtpht = dt.strftime('%d-%m-%Y')
hrpht = dt.strftime('%H:%M:%S')
# Temps d' exposition
global exp
#x = int(1 / tmpxps)
#exp = Fraction(1,x)
# Ouverture
global vrtbjc
y = vrt
vrtbjc = format(y, '0.1f')
# Flash actif
global flash
if flash == 16:
flash = 'Inactif'
else:
flash = 'Actif'
fntslc() #Ouverture de la fenêtre de sélection d' un fichier
# Recherche des balises du chemin du fichier
bls = '/'
pstbls = fchslc.rfind(bls,0,10)
xbls = fchslc.count(bls)
i = 0
while i <= xbls:
pstbls1 = fchslc.rfind(bls)
i = i + 1
bls2 = '.'
pstbls2 = fchslc.rfind(bls2)
# Chemin du fichier
chmfch = fchslc[pstbls:pstbls1 + 1]
# Nom de la photo
nmpht = fchslc[pstbls1 + 1:pstbls2]
# Type d' extention du fichier
xtn = fchslc[pstbls2 + 1:]
#Extraction du fabricant de l' appareil
with ExifTool() as e:
marque = e.get_tag('Make', fchslc)
# Sélection de la procédure en fonction du fabricant de l' appareil
if marque == None:
print ("Il n' y a pas de données exif pour cette photographie !")
marque = '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:
mdl = e.get_tag('Model', fchslc) # Modèle appareil
dtcrt = e.get_tag('DateTimeOriginal', fchslc) # Date et heure prise de vue
lrg = e.get_tag('ImageWidth', fchslc) # Largeur photo
htr = e.get_tag('ImageHeight', fchslc) # Hauteur photo
tmpxps = e.get_tag('ExposureTime', fchslc) # Temps d' exposition
fcl = e.get_tag('FNumber', fchslc) # Focale
lngfcl = e.get_tag('FocalLength', fchslc) # Longueur de focale
iso = e.get_tag('Iso', fchslc) # Sensibilité
vrt = e.get_tag('ApertureValue', fchslc) # Ouverture objectif
lmn = e.get_tag('LightValue', fchslc) # Luminosité
flash = e.get_tag('Flash', fchslc) # Position flash
bjc = e.get_tag('lenstype', fchslc) # Objectif utilisé
dnxf()
elif marque == 'FUJIFILM':
with ExifTool() as e:
mdl = e.get_tag('Model', fchslc) # Modèle appareil
dtcrt = e.get_tag('DateTimeOriginal', fchslc) # Date et heure prise de vue
lrg = e.get_tag('ImageWidth', fchslc) # Largeur photo
htr = e.get_tag('ImageHeight', fchslc) # Hauteur photo
tmpxps = e.get_tag('ExposureTime', fchslc) # Temps d' exposition
fcl = e.get_tag('FNumber', fchslc) # Focale
lngfcl = e.get_tag('FocalLength', fchslc) # Longueur de focale
iso = e.get_tag('Iso', fchslc) # Sensibilité
vrt = e.get_tag('ApertureValue', fchslc) # Ouverture objectif
lmn = e.get_tag('LightValue', fchslc) # Luminosité
flash = e.get_tag('Flash', fchslc) # Position flash
bjc = e.get_tag('lenstype', fchslc) # Objectif utilisé
dnxf()
else:
with ExifTool() as e:
mdl = e.get_tag('Model', fchslc) # Modèle appareil
dtcrt = e.get_tag('DateTimeOriginal', fchslc) # Date et heure prise de vue
lrg = e.get_tag('ImageWidth', fchslc) # Largeur photo
htr = e.get_tag('ImageHeight', fchslc) # Hauteur photo
tmpxps = e.get_tag('ExposureTime', fchslc) # Temps d' exposition
fcl = e.get_tag('FNumber', fchslc) # Focale
lngfcl = e.get_tag('FocalLength', fchslc) # Longueur de focale
iso = e.get_tag('Iso', fchslc) # Sensibilité
vrt = e.get_tag('ApertureValue', fchslc) # Ouverture objectif
lmn = e.get_tag('LightValue', fchslc) # Luminosité
flash = e.get_tag('Flash', fchslc) # Position flash
bjc = e.get_tag('lenstype', fchslc) # Objectif utilisé
dnxf()
# Creation du fichier de sauvegarde
chdir('/home/elfouste/Documents/Python/MacroPython/Tst_Fch')
fch = 'FchDn.txt'
with open('FchDn.txt', 'w') as fch:
fch.write(chmfch)
fch.write(nmpht)
fch.write(xtn)
fch.write(dtpht)
fch.write(hrpht)
fch.write(marque)
fch.write(mdl)
fch.write(str(dmspht))
fch.write(str(tmpxps))
fch.write(str(fcl))
fch.write(str(lngfcl))
fch.write(str(iso))
fch.write(str(bjc))
fch.write(str(vrtbjc))
fch.write(str(lmn))
fch.write(str(flash))
#sys.exit()
h**ps://www.noelshack.com/2019-24-1-1560183742-erreur.png
Je ne comprends pas cette erreur. En effet, elle fait référence au module json alors que je ne l' utilise pas.
Auriez-vous une idée?
Cordialement