我正在尝试使用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上运行
答案 0 :(得分:2)
显然,您需要解释关键字hook
:
def Callback( x, y, z, hook=None):
...
效果很好。
答案 1 :(得分:0)
我可以通过从密码短语回调中返回None
来重现您报告的错误。如果Python函数在没有到达None
语句的情况下到达执行函数的末尾,则默认情况下返回return
。您是否有可能意外地从回调中返回None
,可能是由于您的代码错误地提前结束了您的功能? (错误的想法只是基于你的例子中的非法缩进的猜测。)