class_docstr: Execute using Condor
  
  This plugin doesn't work with a plain stock-Condor installation, but
  requires a 'qsub' emulation script for Condor, called 'condor_qsub'.
  This script is shipped with the Condor package from NeuroDebian, or can be
  downloaded from its Git repository at
  
  http://anonscm.debian.org/gitweb/?p=pkg-exppsy/condor.git;a=blob_plain;f=debian/condor_qsub;hb=HEAD
  
  The plugin_args input to run can be used to control the Condor execution.
  Currently supported options are:
  
  - template : template to use for batch job submission. This can be an
               SGE-style script with the (limited) set of options supported
               by condor_qsub
  - qsub_args : arguments to be prepended to the job execution script in the
                qsub call
code: def _submit_batchtask(self, scriptfile, node):
      cmd = CommandLine(
          "condor_qsub",
          environ=dict(os.environ),
          resource_monitor=False,
          terminal_output="allatonce",
      )
      path = os.path.dirname(scriptfile)
      qsubargs = ""
      if self._qsub_args:
          qsubargs = self._qsub_args
      if "qsub_args" in node.plugin_args:
          if (
              "overwrite" in node.plugin_args
              and node.plugin_args["overwrite"]
          ):
              qsubargs = node.plugin_args["qsub_args"]
          else:
              qsubargs += " " + node.plugin_args["qsub_args"]
      if self._qsub_args:
          qsubargs = self._qsub_args
      if "-o" not in qsubargs:
          qsubargs = f"{qsubargs} -o {path}"
      if "-e" not in qsubargs:
          qsubargs = f"{qsubargs} -e {path}"
      if node._hierarchy:
          jobname = ".".join(
              (dict(os.environ)["LOGNAME"], node._hierarchy, node._id)
          )
      else:
          jobname = ".".join((dict(os.environ)["LOGNAME"], node._id))
      jobnameitems = jobname.split(".")
      jobnameitems.reverse()
      jobname = ".".join(jobnameitems)
      cmd.inputs.args = f"{qsubargs} -N {jobname} {scriptfile}"
      oldlevel = iflogger.level
      iflogger.setLevel(logging.getLevelName("CRITICAL"))
      tries = 0
      while True:
          try:
              result = cmd.run()
          except Exception as e:
              if tries < self._max_tries:
                  tries += 1
                  sleep(
                      self._retry_timeout
                  )  # sleep 2 seconds and try again
              else:
                  iflogger.setLevel(oldlevel)
                  raise RuntimeError(
                      "\n".join(
                          (
                              "Could not submit condor cluster for node %s"
                              % node._id,
                              str(e),
                          )
                      )
                  )
          else:
              break
      iflogger.setLevel(oldlevel)
      # retrieve condor clusterid
      taskid = int(result.runtime.stdout.split(" ")[2])
      self._pending[taskid] = node.output_dir()
      logger.debug(
          "submitted condor cluster: %d for node %s"
          % (taskid, node._id)
      )
      return taskid
  
file_path: nipype/nipype/pipeline/plugins/condor.py
imports: import os
  from time import sleep
  from ...interfaces.base import CommandLine
  from ...None import logging
  from .base import SGELikeBatchManagerBase, logger
label_desc: Use image node_id 3 for calling the CondorPlugin obj's underlying member method code with example usage: obj._submit_batchtask(scriptfile, node) and returns: taskid