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

如何用python-gnupg解密时保留嵌入的原始文件名?

解决python-gnupg解密时保留嵌入原始文件名的问题

你遇到的问题核心在于decrypt_file方法默认会给gpg传递--decrypt参数,这个参数会强制把解密内容输出到stdout,哪怕你加了--use-embedded-filename也不会自动保存到原始文件——这和你在命令行里执行gpg --decrypt --use-embedded-filename test.tim.gpg的效果一致,只会打印内容而不保存。

而命令行里去掉--decrypt只使用--use-embedded-filename就能自动保存到原始文件名,所以我们需要在代码里让python-gnupg调用gpg时不包含--decrypt参数。

解决方案:自定义command参数

decrypt_file方法允许通过command参数指定要传递给gpg的核心命令,而不是使用默认的['--decrypt']。我们只需要把这个参数设置为['--use-embedded-filename'],就能实现和目标命令行一样的效果:

import gnupg
import os

# 初始化gpg对象(根据你的环境调整参数)
gpg = gnupg.GPG()

encrypted_file = 'test.tim.gpg'

with open(encrypted_file, 'rb') as fh:
    # 替换默认的--decrypt命令,使用--use-embedded-filename
    status = gpg.decrypt_file(
        fh,
        command=['--use-embedded-filename']
    )

# 检查解密状态并获取原始文件名
if status.ok:
    print(f"解密完成!文件已保存为:{status.filename}")
else:
    print(f"解密出错:{status.stderr}")

额外说明

  • 执行成功后,status.filename属性会返回嵌入的原始文件名,你可以用这个值做后续的文件操作。
  • 不需要指定output参数,gpg会自动使用嵌入的文件名保存解密后的文件,和你在命令行里的操作逻辑完全一致。

内容的提问来源于stack exchange,提问作者Timmah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:47:44