def callproc(self, procname, args=()):
        if not procname or not isinstance(procname, str):
            raise ValueError("procname must be a string")

        if not isinstance(args, (tuple, list)):
            raise ValueError("args must be a sequence")

        argfmt = "@_%s_arg%d"
        self._stored_results = []

        results = []
        try:
            argnames = []

            if args:
                for idx,arg in enumerate(args):
                    argname = argfmt % (procname, idx+1)
                    argnames.append(argname)
                    self.execute("SET %s=%%s" % (argname), (arg,))

            call = "CALL %s(%s)" % (procname,','.join(argnames))
            
            for result in self._connection.cmd_query_iter(call):
                if 'columns' in result:
                    tmp = MySQLCursorBuffered(self._connection._get_self())
                    tmp._handle_result(result)
                    results.append(tmp)

            if argnames:
                select = "SELECT %s" % ','.join(argnames)
                self.execute(select)
                self._stored_results = results
                return self.fetchone()
            else:
                self._stored_results = results
                return ()

        except errors.Error:
            raise
        except StandardError, e:
            raise errors.InterfaceError(
                "Failed calling stored routine; %s" % e)
Get step arguments.
dataset/ETHPy150Open appnexus/schema-tool/schematool/mysql/connector/cursor.py/MySQLCursor.callproc--crossover with--dataset/ETHPy150Open pytest-dev/pytest-bdd/pytest_bdd/parsers.py/re.parse_arguments