Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对exiftool的Python shell调用_Python_Shell_Exiftool - Fatal编程技术网

对exiftool的Python shell调用

对exiftool的Python shell调用,python,shell,exiftool,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_origi

我有一个图像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}
但是,如果我为要写入的每个图像调用命令,它就会工作。i、 e

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等效脚本:

os.system
往往会这样运行,尤其是在Windows上。您可能会在以下方面获得更大的成功:


os.system
往往会出现这种情况,尤其是在Windows上。您可能会在以下方面获得更大的成功:


如果您的唯一目的是在python中使用exiftool,那么为什么不使用?对不起,我没有足够的声誉发表评论。例如:

 import exiftool

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

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

如果您的唯一目的是在python中使用exiftool,那么为什么不使用?对不起,我没有足够的声誉发表评论。例如:

 import exiftool

 files = ["a.jpg", "b.png", "c.tif"]
 with exiftool.ExifTool() as et:
         metadata = et.get_metadata_batch(files)
更新:对不起,我站更正。该模块不执行exif修改。

受问题和绘制答案的启发,问题似乎是/bin/sh不支持此花括号。因此,解决方案是在subprocess.Popen中设置executable='/bin/bash'

subprocess.Popen(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}'],executable='/bin/bash')
受问题和粗略答案的启发,问题似乎是/bin/sh不支持这种花括号。因此,解决方案是在subprocess.Popen中设置executable='/bin/bash'

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

据我所知,该模块仅用于读取exif数据,而非写入。也许这就是您正在寻找的,它提供读取和写入。据我所知,该模块仅用于读取exif数据,而非写入。也许这就是您正在寻找的,它提供读写功能。使用subprocess.call时问题似乎相同使用subprocess.call时问题似乎相同