Build and return a string with the command required to launch `executable` with the qadapter `qad`.

        Args
            qad: Qadapter instance.
            executable (str): Executable name or path
            stdin (str): Name of the file to be used as standard input. None means no redirection.
            stdout (str): Name of the file to be used as standard output. None means no redirection.
            stderr (str): Name of the file to be used as standard error. None means no redirection.
            exec_args: Optional list of strings with options passed to `executable`.

        Return:
            String with command to execute.

def string_to_run(self, qad, executable, stdin=None, stdout=None, stderr=None, exec_args=None):
        """
        Build and return a string with the command required to launch `executable` with the qadapter `qad`.

        Args
            qad: Qadapter instance.
            executable (str): Executable name or path
            stdin (str): Name of the file to be used as standard input. None means no redirection.
            stdout (str): Name of the file to be used as standard output. None means no redirection.
            stderr (str): Name of the file to be used as standard error. None means no redirection.
            exec_args: Optional list of strings with options passed to `executable`.

        Return:
            String with command to execute.
        """
        stdin = "< " + stdin if stdin is not None else ""
        stdout = "> " + stdout if stdout is not None else ""
        stderr = "2> " + stderr if stderr is not None else ""

        if exec_args:
            executable = executable + " " + " ".join(list_strings(exec_args))

        basename = os.path.basename(self.name)
        if basename in ["mpirun", "mpiexec", "srun"]:
            if self.type is None:
                # $MPIRUN -n $MPI_PROCS $EXECUTABLE < $STDIN > $STDOUT 2> $STDERR
                num_opt = "-n " + str(qad.mpi_procs)
                cmd = " ".join([self.name, self.options, num_opt, executable, stdin, stdout, stderr])
            else:
                raise NotImplementedError("type %s is not supported!" % self.type)

        elif basename == "runjob":
            #runjob --ranks-per-node 2 --exp-env OMP_NUM_THREADS --exe $ABINIT < $STDIN > $STDOUT 2> $STDERR
            #runjob -n 2 --exp-env=OMP_NUM_THREADS --exe $ABINIT < $STDIN > $STDOUT 2> $STDERR
            # exe must be absolute path or relative to cwd.
            bg_size, rpn = qad.bgsize_rankspernode()
            #num_opt = "-n " + str(qad.mpi_procs)
            num_opt = "--ranks-per-node " + str(rpn)
            cmd = " ".join([self.name, self.options, num_opt, "--exp-env OMP_NUM_THREADS",
                           "--exe `which " + executable + "` ", stdin, stdout, stderr])
        else:
            if qad.mpi_procs != 1:
                raise ValueError("Cannot use mpi_procs > when mpi_runner basename=%s" % basename)
            cmd = " ".join([executable, stdin, stdout, stderr])

        return cmd