Python shell调用exiftool

时间:2016-07-25 15:07:03

标签: python shell exiftool

我有一张图片,1.tiff,我想从中将exif数据复制到另外两张图片,即2.tiff和3.tiff。 从普通shell我可以通过输入

将相同的exif数据写入多个图像
exiftool -m -overwrite_original -TagsFromFile "1.tiff" {"2.tiff","3.tiff"}

出于某种原因,我无法通过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数据从一个源图像复制到多个图像而只读取一次源图像?

以下zip文件包含一个有效的bash脚本和等效的非工作python:https://www.dropbox.com/s/nm8fdkdfq7hqi8m/folder.zip?dl=1

3 个答案:

答案 0 :(得分:1)

os.system往往会像这样,特别是在Windows上。您可能会使用subprocess.call获得更多成功:

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

答案 1 :(得分:1)

如果您的唯一目的是在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修改。

答案 2 :(得分:0)

this问题和Rawing回答的启发,问题似乎是/ bin / sh不支持这种花括号。因此,解决方案是在subprocess.Popen

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