重复命令子流程.Popen

2024-09-29 00:13:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个命令行实用程序(exiftool),它通过stdin接受输入。在

从python调用它可能如下所示:

ps = Popen(['exiftool','-groupNames','-json', '-'], stdin=PIPE, stdout=PIPE)

管道通过以下方式使用:

^{pr2}$

正如预期的那样,这将输出运行exiftool的结果,并将ffile的内容作为参数传递。在

我可以在循环中重复调用此代码,但每次调用都会导致fork,而且速度很慢(这不是过早优化的情况)。在

所以我想知道是否有一种方法可以打开exiftool一次,然后“重用”Popen,将多个文件导入其中,并保存每个文件的输出。在

这似乎是不可能的,因为exiftool(与cat不同)似乎将其输入解释为一个完整的块,而不是逐行或根据某个分隔符。但也许黑客入侵exiftool进程的stdin是可能的?在


Tags: 文件命令行实用程序json管道stdinstdout方式
1条回答
网友
1楼 · 发布于 2024-09-29 00:13:00

有一个库PyExifTool正是这样做的:它以批处理模式运行exiftool,使用单个分叉进程从任意数量的文件中提取元数据。另外,库调用将为您解析元数据。在

或者,您可以完全放弃exiftool,使用纯Python图像处理库来读取EXIF数据。推荐一个库超出了堆栈溢出的范围,但是仍然可以在a closed question中找到一些选项。请记住,这个问题已经有七年了,所以你应该自己检查答案的有效性。在

相关问题 更多 >