我有一个命令行实用程序(exiftool),它通过stdin接受输入。在
从python调用它可能如下所示:
ps = Popen(['exiftool','-groupNames','-json', '-'], stdin=PIPE, stdout=PIPE)
管道通过以下方式使用:
^{pr2}$正如预期的那样,这将输出运行exiftool的结果,并将ffile
的内容作为参数传递。在
我可以在循环中重复调用此代码,但每次调用都会导致fork
,而且速度很慢(这不是过早优化的情况)。在
所以我想知道是否有一种方法可以打开exiftool一次,然后“重用”Popen,将多个文件导入其中,并保存每个文件的输出。在
这似乎是不可能的,因为exiftool(与cat不同)似乎将其输入解释为一个完整的块,而不是逐行或根据某个分隔符。但也许黑客入侵exiftool进程的stdin是可能的?在
有一个库PyExifTool正是这样做的:它以批处理模式运行exiftool,使用单个分叉进程从任意数量的文件中提取元数据。另外,库调用将为您解析元数据。在
或者,您可以完全放弃exiftool,使用纯Python图像处理库来读取EXIF数据。推荐一个库超出了堆栈溢出的范围,但是仍然可以在a closed question中找到一些选项。请记住,这个问题已经有七年了,所以你应该自己检查答案的有效性。在
相关问题 更多 >
编程相关推荐