class_docstr: Execute subprocesses under the control of pexpect.
      
class_docstr_tok: ["Execute","subprocesses","under","the","control","of","pexpect","."]
code: def sh(self):
      if self._sh is None:
          shell_name = os.environ.get("SHELL", "sh")
          self._sh = pexpect.which(shell_name)
          if self._sh is None:
              raise OSError('"{}" shell not found'.format(shell_name))
  
      return self._sh
  
file_path: catboost/contrib/python/ipython/py3/IPython/utils/_process_posix.py
imports: import errno
  import os
  import subprocess
  import sys
  import pexpect
  from ._process_common import getoutput, arg_split
  from IPython.utils.encoding import DEFAULT_ENCODING
label_desc: Use image node_id 1 for calling the ProcessHandler obj's underlying member method code with example usage: obj.sh() and returns: self