0

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で実行されています

4

2 に答える 2

2

どうやら、キーワードを解釈する必要がありますhook:

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

完全にうまく機能します。

于 2011-10-29T14:00:39.347 に答える
0

Noneパスフレーズ コールバックから戻ることで、報告されているエラーを再現できます。Python 関数は、ステートメントNoneに到達せずに関数の実行の最後に到達した場合、デフォルトで戻ります。おそらくコードのインデントが誤って関数を早期に終了させたために、return誤ってコールバックから戻っている可能性はありますか? None(誤ったインデントのアイデアは、あなたの例の不正なインデントに基づく単なる推測です。)

于 2010-09-19T09:58:50.287 に答える