繁体   English   中英

使用subprocess.Popen重复命令

[英]Repeating command with subprocess.Popen

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

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

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

通过以下方式使用管道的地方:

with open(ffile, 'r') as fh:
    ps.stdin.write(fh.read())
ps.stdin.close()
print ps.stdout.read()
ps.wait()

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

我可以在循环中重复调用此代码,但它会导致每个调用都有一个fork ,并且实际上很慢(这不是过早优化的情况)。

所以我想知道是否有办法打开exiftool一次,然后“重新使用”Popen,将多个文件输入到它中,并保存每个文件的输出。

它看起来似乎不太可能,因为exiftool(与cat不同)似乎将其输入解释为整个块,而不是逐行或根据某些分隔符。 但也许有可能通过黑客攻击exiftool进程的stdin?

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

或者,您可以完全放弃exiftool并使用纯Python图像处理库来读取EXIF数据。 推荐库超出Stack Overflow的范围,但是有一个封闭的问题 ,您可以在其中找到一些选项。 请记住,问题是七年之久,因此您应该自己检查答案的当前有效性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM