2016-07-25 11 views
0

Ich habe ein Bild, 1.tiff, von dem ich die Exif-Daten auf zwei andere Bilder kopieren möchte, 2.tiff und 3.tiff. von der normalen Shell kann ich die gleichen EXIF-Daten, um mehrere Bilder schreiben vonPython Shell Aufruf an exiftool

exiftool -m -overwrite_original -TagsFromFile "1.tiff" {"2.tiff","3.tiff"} 

Aus irgendeinem Grund eingeben, ich bin dieses Formular zu tun pyton nicht in der Lage. Wenn ich ausführen den gleichen Shell-Befehl aus einem Python-Skript, das heißt

os.system('exiftool -m -overwrite_original -TagsFromFile "1.tiff" {"2.tiff","3.tiff"}') 

Ich erhalte die folgende Fehlermeldung:

Error: File not found - {2.tiff,3.tiff} 

Es funktioniert, aber wenn ich den Befehl für jedes einzelnes Bild anrufen, geschrieben werden. das heißt

os.system('exiftool -m -overwrite_original -TagsFromFile "1.tiff" "2.tiff"') 
os.system('exiftool -m -overwrite_original -TagsFromFile "1.tiff" "3.tiff"') 

Aber, wie ich den Befehl mehr tausend Mal nennen werde, ist die EXIF-Daten aus 1.tiff immer und immer wieder zu lesen einfach zu langsam. Haben Sie Vorschläge zum Kopieren von Exif-Daten von einem Quellbild in mehrere Bilder, während Sie das Quellbild nur einmal lesen?

Die folgende Zip-Datei enthält einen Bash-Skript arbeiten und die nicht funktionierende Python-äquivalent: https://www.dropbox.com/s/nm8fdkdfq7hqi8m/folder.zip?dl=1

Antwort

1

os.system neigt, so zu handeln, vor allem unter Windows. Sie werden wahrscheinlich mehr Erfolg mit subprocess.call haben:

subprocess.call(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}']) 
+0

Das Problem das gleiche zu sein scheint, wenn subprocess.call mit – MadsDyrmann

0

Wenn Ihr einziger Zweck in Python zu verwenden exiftool ist, warum dann nicht this module benutzen? Tut mir leid, dass ich nicht genug Reputation habe, um Kommentare zu posten. Zum Beispiel:

import exiftool 

files = ["a.jpg", "b.png", "c.tif"] 
with exiftool.ExifTool() as et: 
     metadata = et.get_metadata_batch(files) 

UPDATE: Sorry, ich stehe korrigiert. Dieses Modul führt keine Exif-Änderung durch.

+0

Soweit ich weiß, ist, dass Modul nur zum Lesen exif Daten, nicht schreiben. – MadsDyrmann

+0

https://pypi.python.org/pypi/piexif, vielleicht ist das, was Sie suchen, es bietet lesen und schreiben. – NuclearPeon

0

Inspiriert von this Frage und Rawing Antwort scheint das Problem zu sein, dass/bin/sh, die diese geschweiften Klammern nicht unterstützt. Die Lösung ist daher ausführbar = ‚/ bin/bash‘ gesetzt in subprocess.Popen

subprocess.Popen(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}'],executable='/bin/bash')