You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:32:37