def run_python(self): with dir_changer(self.dirname, delete_dir=False): script_filename = f'{self.__class__.__name__.lower()}.py' with open(script_filename, 'w', encoding='utf-8') as fout: fout.write(self.python_code()) execute_wrapper([self.venv.python_path, script_filename])
def run_go(self): with dir_changer(self.dirname, delete_dir=False): script_filename = f'{self.__class__.__name__.lower()}.go' with open(script_filename, 'w', encoding='utf-8') as fout: fout.write(self.go_code()) if self.leaves_path: with open('go.mod', 'w', encoding='utf-8') as fout: fout.write(f""" module main require "github.com/ucfunnel/leaves" v0.0.0 replace "github.com/ucfunnel/leaves" v0.0.0 => "{self.leaves_path}" """) self.logger.info(f'Build {script_filename}') execute_wrapper(['go', 'build', script_filename]) executable_filename = script_filename[:-3] if not os.path.isfile(executable_filename): raise RuntimeError( f'no executable found: {executable_filename}') self.logger.info(f'Run {executable_filename}') execute_wrapper([f'./{executable_filename}'])
def execute_programs(programs, dirname): """ Execute programs in `dirname`. If `dirname` is empty the temporary dir will be created and removed after. """ if not dirname: delete_dir = True dirname = tempfile.mkdtemp(prefix='doctest') else: delete_dir = False dirname = os.path.abspath(dirname) os.makedirs(dirname, exist_ok=True) logger.info(f'Dir: {dirname} (delete: {delete_dir})') with dir_changer(dirname, delete_dir): for program in programs: executor = program_types[program.language] executor(program)