'Call the binary with the given input.
:param input_str: A string whose contents are used as stdin.
:param binary: The location of the binary to call
:param args: A list of command-line arguments.
:return: A tuple (stdout, returncode)
:see: ``config_prover9``'

def _call(self, input_str, binary, args=[], verbose=False):

    if verbose:
        print('Calling:', binary)
        print('Args:', args)
        print('Input:\n', input_str, '\n')
    cmd = ([binary] + args)
    try:
        input_str = input_str.encode('utf8')
    except AttributeError:
        pass
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
    (stdout, stderr) = p.communicate(input=input_str)
    if verbose:
        print('Return    code:', p.returncode)
        if stdout:
            print('stdout:\n', stdout, '\n')
        if stderr:
            print('stderr:\n', stderr, '\n')
    return (stdout.decode('utf-8'), p.returncode)
