def _execute(self, *args):
        """ Execute a given taskwarrior command with arguments

        Returns a 2-tuple of stdout and stderr (respectively).

        """
        command = (
            [
                'task',
                'rc:%s' % self.config_filename,
            ]
            + self.get_configuration_override_args()
            + [six.text_type(arg) for arg in args]
        )

        # subprocess is expecting bytestrings only, so nuke unicode if present
        # and remove control characters
        for i in range(len(command)):
            if isinstance(command[i], six.text_type):
                command[i] = (
                    taskw.utils.clean_ctrl_chars(command[i].encode('utf-8')))

        try:
            proc = subprocess.Popen(
                command,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
            )
            stdout, stderr = proc.communicate()
        except OSError as e:
            if e.errno == errno.ENOENT:
                raise OSError("Unable to find the 'task' command-line tool.")
            raise

        if proc.returncode != 0:
            raise TaskwarriorError(command, stderr, stdout, proc.returncode)

        # We should get bytes from the outside world.  Turn those into unicode
        # as soon as we can.
        # Everything going into and coming out of taskwarrior *should* be
        # utf-8, but there are weird edge cases where something totally unusual
        # made it in.. so we need to be able to handle (or at least try to
        # handle) whatever.  Kitchen tries its best.
        try:
            stdout = stdout.decode(self.config.get('encoding', 'utf-8'))
        except UnicodeDecodeError as e:
            stdout = kitchen.text.converters.to_unicode(stdout)
        try:
            stderr = stderr.decode(self.config.get('encoding', 'utf-8'))
        except UnicodeDecodeError as e:
            stderr = kitchen.text.converters.to_unicode(stderr)

        # strip any crazy terminal escape characters like bells, backspaces,
        # and form feeds
        for c in ('\a', '\b', '\f', ''):
            stdout = stdout.replace(c, '?')
            stderr = stderr.replace(c, '?')

        return stdout, stderr
Execute a given taskwarrior command with arguments

        Returns a 2-tuple of stdout and stderr (respectively).