code: def run(self):
          
          stderr = os.path.abspath(os.path.join(self.outdir, self.name + '.log'))
  
          if self.pipe:
              self.args += ('|', self.pipe, '2>>'+stderr)
  
          if self.gzip:
              self.args += ('|', 'gzip', '1>', self.gzip)
          else:
              self.args.append('2>>'+stderr)
              self.args.append('1>>'+stderr)
  
          # Print timestamp to log
  
          log = open(stderr, 'a')
          log.write("[gloTK] timestamp={}\n".format(utils.timestamp()))
  
          cmd = ' '.join(map(str, self.args))
          print(cmd)
          log.write(cmd)
  
          start = time.time()
          save_cwd = os.getcwd()
          try:
              utils.safe_mkdir(self.outdir)
              os.chdir(self.outdir)
              spawn_pid = os.spawnle(os.P_NOWAIT, self.shell, self.shell, '-c', cmd, self.env)
              wait_pid, retcode, rusage = os.wait4(spawn_pid, 0)
              if wait_pid != spawn_pid:
                  utils.die("could not wait for process %d: got %d" % (spawn_pid, wait_pid))
              os.chdir(save_cwd)
          except OSError as e:
              utils.info(e)
              utils.die("could not run wrapper for command:\n%s" % cmd)
  
          elapsed = time.time() - start
          retcode = os.WEXITSTATUS(retcode)
  
          if (self.return_ok is not None) and (self.return_ok != retcode):
              # Give some context to the non-zero return.
              if os.path.isfile(stderr):
                  subprocess.call(['tail', '-3', stderr])
              utils.die("non-zero return (%d) from command:\n%s" % (retcode, cmd))
          log.close()
docs: Call this function at the end of your class's `__init__` function.