docs: def run(self, cleanup=True, printOutput=False):
          '''
          Runs TreeLiker with the given settings.
  
              :param cleanup: deletes temporary files after completion
              :param printOutput: print algorithm output to the terminal
          '''
          self._copy_data()
          self._batch()
  
          dumpFile = None
          if not printOutput:
              dumpFile = tempfile.TemporaryFile()
  
          p = Popen(['java', '-Xmx3G', '-cp', 'bin/TreeLiker.jar', 
                     'ida.ilp.treeLiker.TreeLikerMain', '-batch', self.batch], 
                     cwd=self.tmpdir,
                     stdout=dumpFile,
                     stderr=dumpFile)
          stdout_str, stderr_str = p.communicate()
  
          if not self.test_dataset:
              arff = open('%s/%s.arff' % (self.tmpdir, self.basename)).read()
              arff_test = None
          else:
              arff = open('%s/conversion/train.arff' % self.tmpdir).read()
              arff_test = open('%s/conversion/test.arff' % self.tmpdir).read()
  
          if cleanup:
              self._cleanup()
          
          return (arff, arff_test)