Exemplo n.º 1
0
    def build_template(self, job_header=None, prologue=None, epilogue=None):
        """
        Build batch file template
        """

        import os, stat
        from code_saturne.cs_exec_environment import append_shell_shebang, \
            append_script_comment, prepend_path_command

        if not self.package:
            from code_saturne import cs_package
            self.package = cs_package.package()

        self.lines = []

        append_shell_shebang(self.lines)

        # Add batch system info and user prologue if necessary

        if job_header:
            for line in job_header.split(os.linesep):
                self.lines.append(line)
            self.lines.append('')

        # Ensure switch to script directory

        append_script_comment(self.lines,
                              'Set working directory:' + os.linesep)
        self.lines.append('cd ' + enquote_arg(os.path.dirname(self.path)))
        self.lines.append('')

        if prologue:
            append_script_comment(self.lines, 'User prologue:' + os.linesep)
            for line in prologue.split(os.linesep):
                self.lines.append(line)
            self.lines.append('')

        # Add command to execute.

        append_script_comment(self.lines, 'Run command:' + os.linesep)

        exec_path = os.path.join(self.package.get_dir("bindir"),
                                 self.package.name)
        run_cmd = enquote_arg(exec_path) + ' run'
        self.cmd_name = self.package.name
        self.run_cmd_line_id = len(self.lines)
        self.lines.append(run_cmd)
        self.lines.append('')

        if epilogue:
            append_script_comment(self.lines, 'User epilogue:' + os.linesep)
            for line in epilogue.split(os.linesep):
                self.lines.append(line)
            self.lines.append('')

        self.save()

        st = os.stat(self.path)
        mode = st[stat.ST_MODE]
        os.chmod(self.path, mode | stat.S_IEXEC)
Exemplo n.º 2
0
    def build_template(self, package=None, study_name=None, case_name=None,
                       ignore_batch=False):
        """
        Build batch file template
        """

        import os, stat
        from code_saturne.cs_exec_environment import append_shell_shebang, \
            append_script_comment, prepend_path_command

        if not package:
            from code_saturne import cs_package
            package = cs_package.package()

        self.lines = []

        append_shell_shebang(self.lines)

        # Add batch system info if necessary

        batch_template = None
        config = configparser.ConfigParser()
        config.read(package.get_configfiles())

        if not ignore_batch and config.has_option('install', 'batch'):

            batch_template = config.get('install', 'batch')

            if not os.path.isabs(batch_template):
                batch_template = os.path.join(package.get_batchdir(),
                                             'batch.' + batch_template)

            fdt = open(batch_template, 'r')

            import re, string
            kwd1 = re.compile('nameandcase')

            # Determine or build default names if required

            if not case_name or not study_name:

                topdir, scriptdir = os.path.split(os.path.split(self.path)[0])
                if scriptdir == 'SCRIPTS':
                    studydir, casedir = os.path.split(topdir)
                    studydir = os.path.split(studydir)[1]
                else:
                    casedir = ''
                    studydir = scriptdir

                if not case_name:
                    if casedir:
                        case_name = casedir
                    else:
                        case_name = ''
                if not study_name:
                    study_name = studydir

            studycasename = study_name.lower() + case_name.lower()

            # For some systems, names are limited to 15 caracters
            studycasename = studycasename[:15]

            for line in fdt:
                line = line.rstrip()
                line = re.sub(kwd1, studycasename, line)
                self.lines.append(line)

            fdt.close()

        # Add command to execute.

        append_script_comment(self.lines, 'Ensure the correct command is found:')

        self.lines.append(prepend_path_command('PATH',
                                               package.get_dir("bindir")))
        self.lines.append('')
        append_script_comment(self.lines, 'Run command:\n')
        # On Linux systems, add a backslash to prevent aliases
        if sys.platform.startswith('win'):
            run_cmd = ''
        else:
            run_cmd = '\\'
        run_cmd += package.name + ' run'
        self.run_cmd_line_id = len(self.lines)
        self.lines.append(run_cmd)

        self.save()

        st   = os.stat(self.path)
        mode = st[stat.ST_MODE]
        os.chmod(self.path, mode | stat.S_IEXEC)