import gpgme import StringIO import sys import getpass import os def passphrase_cb(uid_hint, pass_info, prev_was_bad, fd): print uid_hint print pass_info print prev_was_bad print 'please provide the password for: %s' % uid_hint res = getpass.getpass() os.write(fd, '%s\n' % res) ctx = gpgme.Context() ctx.armor = True ctx.passphrase_cb = passphrase_cb key = ctx.get_key(sys.argv[1]) ctx.signers = [key] plaintext = open(sys.argv[2], 'r') signature = StringIO.StringIO() new_sigs = ctx.sign(plaintext, signature, gpgme.SIG_MODE_DETACH) signature.seek(0) print signature.read()