如何用PyExiftool实现Exiftool命令行-s -f -listx的XML输出效果?
解决PyExiftool调用Exiftool生成XML数据库列表的问题
直接在exiftool.execute中传递带>的命令会报错,因为>是Shell的重定向语法,并非Exiftool本身的参数,PyExiftool默认不会通过Shell解析命令,导致Exiftool识别无效参数。以下是两种可行的实现方式:
方法一:捕获输出并手动写入文件(推荐)
这种方式不需要依赖Shell,安全性更高,且能灵活处理输出内容:
import exiftool # 目标XML文件路径 target_xml = r"d:\newXmlFile.xml" # 用上下文管理器启动Exiftool进程,自动管理生命周期 with exiftool.ExifTool() as et: # 传递纯Exiftool参数,捕获输出(bytes类型) xml_content_bytes = et.execute("-s", "-f", "-listx") # 解码为UTF-8字符串并写入文件 with open(target_xml, "w", encoding="utf-8") as f: f.write(xml_content_bytes.decode("utf-8"))
方法二:通过Shell执行命令(不推荐)
如果一定要沿用命令行的重定向写法,可以开启Shell模式,但存在路径注入风险,需确保路径是可信的:
import exiftool target_xml = r"d:\newXmlFile.xml" # 拼接完整Shell命令 cmd = f"exiftool -s -f -listx > {target_xml}" with exiftool.ExifTool() as et: # 开启shell=True执行命令 et.execute(cmd, shell=True)
关键注意事项
- 确保Exiftool可执行文件已加入系统环境变量,或者初始化时指定路径:
exiftool.ExifTool(executable=r"C:\your-path\exiftool.exe") - 若在wxPython项目中使用,建议将此逻辑放在后台线程执行,避免阻塞UI界面
- 处理编码时必须用UTF-8,否则可能出现XML内容乱码
内容的提问来源于stack exchange,提问作者user999713
相关产品推荐
相关产品推荐

