Page 1 sur 1

EXIFTOOL dans un programme PureBasic

Publié : ven. 29/janv./2021 20:51
par sospel
Bonjour à tous et à chacun en particulier :)

Utilisant souvent PUREBASIC pour mes utilitaires informatiques courants, j'ai voulu utiliser EXIFTOOL pour récupérer dans un fichier "DonnExif.txt" toutes les données "exif" d'une photo JPG.

j'ai fait d'abord un essai dans l'invite de commandes sous W10 et ça a fonctionné du premier coup :
Par exemple :

"C:\....\Exif-Tool\exiftool-12.16\exiftool.exe " "G:\DossiersPersos\...\Tempor\pict0001.JPG" > "G:\DossiersPersos\Tempor\DonnExif.txt"

Puis, j'ai voulu faire la même chose pour traiter plusieurs photos, et j'ai donc mis le process "RUNPROGRAM(....)" de PureBasic dans une boucle sur le nombre de photos (1 seule pour commencer !).
Et là, problème : je me mélange les pinceaux dans les "paramètres" : ceux de RUNPROGRAM() lui-même et ceux de EXIFTOOL, pléthoriques .
D'où l'issue fatale : pas de DonnExif.txt :(

Est-ce quelqu'un (@TYPHON ??) pourrait m'indiquer la bonne syntaxe ??

Merci d'avance :)
Cordialement
SosPel

Re: EXIFTOOL dans un programme PureBasic

Publié : sam. 30/janv./2021 7:11
par case
tout d'abord je suppose que le chemin que tu indique dans ta demande est incomplet
"C:\....\Exif-Tool\exiftool-12.16\exiftool.exe"
les '....' doivent etre remplacés par le chemin réel du programme

as tu essayer quelque chose comme ca ?

Code : Tout sélectionner

runprogram("C:\....\Exif-Tool\exiftool-12.16\exiftool.exe",chr(34)+"G:\DossiersPersos\...\Tempor\pict0001.JPG"+chr(34)+" > "+chr(34)+"G:\DossiersPersos\Tempor\DonnExif.txt"+chr(34))
apres il est possible que l'utilisation du > pour ecrire la sortie cli dans un fichier ne fonctionne pas avec runprogram. donc il faudrait regarder la doc de exiftool pour voir si il y a moyen de specifier une sortie dans un fichier.

Code : Tout sélectionner

runprogram("C:\....\Exif-Tool\exiftool-12.16\exiftool.exe",chr(34)+"G:\DossiersPersos\...\Tempor\pict0001.JPG"+chr(34)+" -w %d%f.txt")

Re: EXIFTOOL dans un programme PureBasic

Publié : sam. 30/janv./2021 10:02
par Marc56
Le redirection de sortie fonctionne (la plupart du temps).

Code : Tout sélectionner

RunProgram(GetEnvironmentVariable("ComSpec")    , 
           "/k echo hello World! > "            + 
           GetTemporaryDirectory()              + 
           "hello.txt"                          , 
           ""                                   , 
           #PB_Program_Hide)
C'est le pipe ( | ) qui pose parfois problème.
:wink:

Re: EXIFTOOL dans un programme PureBasic

Publié : mar. 02/févr./2021 0:38
par Naheulf
La redirection vers un fichier peut être faite en PureBasic :

Code : Tout sélectionner

ProgramName$ = "C:\....\Exif-Tool\exiftool-12.16\exiftool.exe"
ImageATraiter$ = "G:\DossiersPersos\...\Tempor\pict0001.JPG"

program = RunProgram(ProgramName$, #DQUOTE$+ImageATraiter$+#DQUOTE$, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If program
	OpenFile(0, ImageATraiter$+".EXIF")
	While ProgramRunning(program)
		WriteStringN(0, ReadProgramString(program))
	Wend
	CloseFile(0)
	CloseProgram(program)
EndIf
De même que pour le chaînage des programmes :

Code : Tout sélectionner

ProgramName1$ = "emeteur.exe"
ParamsProgram1$ = #Empty$
ProgramName2$ = "recepteur.exe"
ParamsProgram1$ = #Empty$

program1 = RunProgram(ProgramName1$, ParamsProgram1$, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If program1
	program2 = RunProgram(ProgramName2$, ParamsProgram2$, "", #PB_Program_Open | #PB_Program_Connect, program1)
	If program2
		WaitProgram(program2)
		CloseProgram(program2)
	EndIf
	CloseProgram(program1)
EndIf

Re: EXIFTOOL dans un programme PureBasic

Publié : mer. 03/févr./2021 14:34
par sospel
Hello :)

Merci à case , Marc56, Naheulf pour vos suggestions !

Rem pour @case : l'écriture "C:\....\Exif-Tool\..." sous-entendait évidemment que les "..." remplacaient le path exact :)

Ceci dit, renseignements pris sur le site ExifTool, la redirection " > " s'écrit " -W+! " . Il suffisait de le savoir

Je vais aussi tester vos solutions, puisqu'applicables directement avec PureBasic !
Encore Merci
Cordialement
SosPel