在python中使用pyme在没有用户交互的情况下解密PGP时出现问题

在python中使用pyme在没有用户交互的情况下解密PGP时出现问题,python,pgp,gnupg,gpgme,pyme,Python,Pgp,Gnupg,Gpgme,Pyme,我正在尝试使用pyme(来自gpgme的python包装器)解密消息。如果我在提示时键入密码,它可以正常工作,但我无法使密码短语回调正常工作。这是密码 import pyme.core def Callback( x, y, z ): print 'in passphrase callback' return 'passphrase' plain = pyme.core.Data() cipher = pyme.core.Data(sys.stdin.read()) c = pym

我正在尝试使用pyme(来自gpgme的python包装器)解密消息。如果我在提示时键入密码,它可以正常工作,但我无法使密码短语回调正常工作。这是密码

import pyme.core

def Callback( x, y, z ):
    print 'in passphrase callback'
 return 'passphrase'

plain = pyme.core.Data()
cipher = pyme.core.Data(sys.stdin.read())
c = pyme.core.Context()
c.set_armor(1)
c.set_passphrase_cb(Callback)
c.op_decrypt( cipher, plain )
plain.seek(0,0)
print plain.read()
当我运行此操作且不以交互方式提供密码时,程序会尝试“以密码短语回调”打印回调,但随后失败,出现错误:

pyme.errors.GPGMEError: Invocation of gpgme_op_decrypt: Unspecified source: General error (0,1)
首先也是最重要的是,为什么密码短语回调不起作用?其次,如何防止程序在调用密码短语回调之前提示用户输入密码


这是在Ubuntu 10.04上运行的

我可以通过从密码短语回调返回
None
来重现您报告的错误。默认情况下,如果Python函数在执行函数结束时未到达
return
语句,则返回
None
。是否可能是由于代码错误地提前结束函数而意外地从回调返回
None
?(错齿只是基于示例中非法缩进的猜测。)

显然,您需要解释关键字
hook

   def Callback( x, y, z, hook=None):
   ...

非常好。

不幸的是,本例中的缩进错误只是一个复制粘贴错误。在我的代码中,回调函数正确地返回一个字符串。您运行的python/pyme/os的哪个版本能够使其正常工作?@user19745我正在使用libgpgme11.2.0-1.2和python pyme 0.8.1+clean-4运行Debian测试。