import subprocess, os class GpgError(Exception): pass class ExecutionError(GpgError): def __init__(self, errcode): self.error_code = errcode def sign(input_file, extra_args=[]): cmd = ['gpg', '--sign'] cmd.extend(extra_args) cmd.append(input_file) process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True, universal_newlines=True) stdout = process.communicate()[0] process.wait() if process.returncode != 0: raise ExecutionError(process.returncode) return stdout