class Compiler(object): def __init__(self, **kwargs): self.__dict__.update(kwargs) self.src_path = Path(self.src_path) self.out_path = Path(self.out_path) self.print = self.print or self.src_filter self.classpath = os.environ["CLASSPATH"] self.src_extensions = self.src_extensions.split(",") try: self.plugin_path = path_resolv.resolve("lib/sketchrewriter.jar") except: self.plugin_path = "" assert self.src_path.exists() and self.out_path.exists() def clean_dir(self): if self.clean: [self.out_path.subpath(f).remove_tree() for f in self.out_path.listdir()] @staticmethod def print_cmd(cmd): def quote(v): v = re.sub("([\$\'\"])", r"\\\g<1>", v) return "\"%s\"" %(v) if (" " in v) else v print(" ".join([quote(v) for v in cmd])) def run(self, cmd, save_output=None, file_ext="txt"): if self.print: self.print_cmd(cmd) save_output = (self.kwrite or self.vim) if save_output else save_output pipe_output = { "stdout": subprocess.PIPE } if save_output else { } try: proc = subprocess.Popen(cmd, **pipe_output) text = proc.communicate()[0] except Exception, e: proc = namedtuple("anon", "returncode")(1) text = "ERROR RUNNING COMMAND - " + str(e) if proc.returncode != 0: print("=== error compiling ===") if not self.print: self.print_cmd(cmd) if text: print(text) sys.exit(1) elif not save_output: return from tempfile import NamedTemporaryFile tf = NamedTemporaryFile(suffix="." + file_ext, delete=False) tf.write(text) tf.close() if self.kwrite: subprocess.Popen(["kwrite", tf.name], stderr=subprocess.PIPE) elif self.vim: subprocess.Popen(["vim", tf.name]).wait()