Example #1
0
            def launch(self, *args, **kwargs):
                agent = self._file('setbufsize.so')
                shutil.copyfile(setbufsize_path, agent)
                env = {
                    # Forward LD_LIBRARY_PATH for systems (e.g. Android Termux) that require
                    # it to find shared libraries
                    'LD_LIBRARY_PATH': os.environ.get('LD_LIBRARY_PATH', ''),
                    'LD_PRELOAD': agent,
                    'CPTBOX_STDOUT_BUFFER_SIZE':
                    kwargs.get('stdout_buffer_size'),
                    'CPTBOX_STDERR_BUFFER_SIZE':
                    kwargs.get('stderr_buffer_size'),
                }
                env.update(self.get_env())

                return SecurePopen(
                    [utf8bytes(a) for a in self.get_cmdline() + list(args)],
                    executable=utf8bytes(self.get_executable()),
                    security=self.get_security(launch_kwargs=kwargs),
                    address_grace=self.get_address_grace(),
                    personality=self.personality,
                    fds=kwargs.get('fds'),
                    time=kwargs.get('time'),
                    memory=kwargs.get('memory'),
                    wall_time=kwargs.get('wall_time'),
                    stderr=(PIPE
                            if kwargs.get('pipe_stderr', False) else None),
                    env=env,
                    cwd=utf8bytes(self._dir),
                    nproc=self.get_nproc())
Example #2
0
            def launch(self, *args, **kwargs):
                agent = self._file('setbufsize.so')
                shutil.copyfile(setbufsize_path, agent)
                env = {
                    'LD_PRELOAD': agent,
                    'CPTBOX_STDOUT_BUFFER_SIZE':
                    kwargs.get('stdout_buffer_size'),
                    'CPTBOX_STDERR_BUFFER_SIZE':
                    kwargs.get('stderr_buffer_size'),
                }
                env.update(self.get_env())

                return SecurePopen(
                    [utf8bytes(a) for a in self.get_cmdline() + list(args)],
                    executable=utf8bytes(self.get_executable()),
                    security=self.get_security(launch_kwargs=kwargs),
                    address_grace=self.get_address_grace(),
                    personality=self.personality,
                    time=kwargs.get('time'),
                    memory=kwargs.get('memory'),
                    wall_time=kwargs.get('wall_time'),
                    stderr=(PIPE
                            if kwargs.get('pipe_stderr', False) else None),
                    env=env,
                    cwd=utf8bytes(self._dir),
                    nproc=self.get_nproc())
Example #3
0
 def get_env(self):
     env = super(BaseExecutor, self).get_env()
     env_key = self.get_executor_name().lower() + '_env'
     if env_key in self.runtime_dict:
         env = env or {}
         env.update(self.runtime_dict[env_key])
     return env
Example #4
0
 def get_env(self):
     env = super(BaseExecutor, self).get_env()
     env_key = self.get_executor_name().lower() + '_env'
     if env_key in self.runtime_dict:
         env = env or {}
         env.update(self.runtime_dict[env_key])
     return env
Example #5
0
    def launch(self, *args, **kwargs) -> TracedPopen:
        assert self._dir is not None
        for src, dst in kwargs.get('symlinks', {}).items():
            src = os.path.abspath(os.path.join(self._dir, src))
            # Disallow the creation of symlinks outside the submission directory.
            if os.path.commonprefix([src, self._dir]) == self._dir:
                # If a link already exists under this name, it's probably from a
                # previous case, but might point to something different.
                if os.path.islink(src):
                    os.unlink(src)
                os.symlink(dst, src)
            else:
                raise InternalError(
                    'cannot symlink outside of submission directory')

        agent = self._file('setbufsize.so')
        # Hardcode the ABIs for different executors for now
        if self.name == 'CPP17X':
            shutil.copyfile(setbufsize32_path, agent)
        elif self.name == 'TUR':
            shutil.copyfile(setbufsize86_path, agent)
        else:
            shutil.copyfile(setbufsize_path, agent)
        env = {
            # Forward LD_LIBRARY_PATH for systems (e.g. Android Termux) that require
            # it to find shared libraries
            'LD_LIBRARY_PATH': os.environ.get('LD_LIBRARY_PATH', ''),
            'LD_PRELOAD': agent,
            'CPTBOX_STDOUT_BUFFER_SIZE': kwargs.get('stdout_buffer_size'),
            'CPTBOX_STDERR_BUFFER_SIZE': kwargs.get('stderr_buffer_size'),
        }
        env.update(self.get_env())

        executable = self.get_executable()
        assert executable is not None
        return TracedPopen(
            [utf8bytes(a) for a in self.get_cmdline(**kwargs) + list(args)],
            executable=utf8bytes(executable),
            security=self.get_security(launch_kwargs=kwargs),
            address_grace=self.get_address_grace(),
            data_grace=self.data_grace,
            personality=self.personality,
            time=kwargs.get('time', 0),
            memory=kwargs.get('memory', 0),
            wall_time=kwargs.get('wall_time'),
            stdin=kwargs.get('stdin'),
            stdout=kwargs.get('stdout'),
            stderr=kwargs.get('stderr'),
            env=env,
            cwd=utf8bytes(self._dir),
            nproc=self.get_nproc(),
            fsize=self.fsize,
        )
Example #6
0
 def get_env(self):
     env = super(GCCExecutor, self).get_env() or {}
     env.update(GCC_ENV)
     return env
Example #7
0
 def get_env(self) -> dict:
     env = super().get_env() or {}
     env.update(GCC_ENV)
     return env
Example #8
0
 def get_env(self) -> Dict[str, str]:
     env = super().get_env() or {}
     env.update(GCC_ENV)
     return env
Example #9
0
 def get_env(self):
     env = super(GCCExecutor, self).get_env() or {}
     env.update(GCC_ENV)
     return env