2016-07-25 98 views
0

我有一个图像,1.tiff,我想从其中复制EXIF数据到另外两个图像,2.tiff和3.tiff。 从正常的外壳,我可以通过键入Python shell调用exiftool

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

出于某种原因写在同一EXIF数据到多个图像,我没有能够做到这一点的形式pyton。 如果我执行从一个Python脚本相同的shell命令,即

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

我收到以下错误:

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

但是,由于它的工作原理,如果我调用命令为每一个形象,被写入。即

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

但是,因为我要调用命令几千倍,从1.tiff一遍又一遍读的EXIF数据简直是太慢了。 对于如何将Exif数据从一个源图像复制到多个图像,同时只读取一次源图像,您有任何建议吗?

下面的压缩文件包含一个工作的bash脚本和非工作蟒蛇相当于:https://www.dropbox.com/s/nm8fdkdfq7hqi8m/folder.zip?dl=1

回答

1

os.system趋于行动起来像,特别是在Windows上。你可能有与subprocess.call更大的成功:

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

这个问题似乎使用subprocess.call – MadsDyrmann

0

如果你唯一的目的是在Python中使用exiftool那么为什么不使用this module?抱歉,我没有足够的声望发布评论。例如:

import exiftool 

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

更新:对不起,我立场纠正。该模块不执行exif修改。

+0

据我知道什么时候是一样的,该模块仅用于读取EXIF数据,而不是写作。 – MadsDyrmann

+0

https://pypi.python.org/pypi/piexif,或许这就是你正在寻找的东西,它提供了阅读和写作。 – NuclearPeon

0

this问题和Rawing答案的启发,问题似乎是不支持此花括号的/ bin/sh。因此,解决的办法是在subprocess.Popen设置可执行=“/斌/庆典”

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