class_docstr: This class extends pexpect.spawn to specialize setting up SSH
  connections. This adds methods for login, logout, and expecting the shell
  prompt. It does various tricky things to handle many situations in the SSH
  login process. For example, if the session is your first login, then pxssh
  automatically accepts the remote certificate; or if you have public key
  authentication setup then pxssh won't wait for the password prompt.
  
  pxssh uses the shell prompt to synchronize output from the remote host. In
  order to make this more robust it sets the shell prompt to something more
  unique than just $ or #. This should work on most Borne/Bash or Csh style
  shells.
  
  Example that runs a few commands on a remote server and prints the result::
  
      from pexpect import pxssh
      import getpass
      try:
          s = pxssh.pxssh()
          hostname = raw_input('hostname: ')
          username = raw_input('username: ')
          password = getpass.getpass('password: ')
          s.login(hostname, username, password)
          s.sendline('uptime')   # run a command
          s.prompt()             # match the prompt
          print(s.before)        # print everything before the prompt.
          s.sendline('ls -l')
          s.prompt()
          print(s.before)
          s.sendline('df')
          s.prompt()
          print(s.before)
          s.logout()
      except pxssh.ExceptionPxssh as e:
          print("pxssh failed on login.")
          print(e)
  
  Example showing how to specify SSH options::
  
      from pexpect import pxssh
      s = pxssh.pxssh(options={
                          "StrictHostKeyChecking": "no",
                          "UserKnownHostsFile": "/dev/null"})
      ...
  
  Note that if you have ssh-agent running while doing development with pxssh
  then this can lead to a lot of confusion. Many X display managers (xdm,
  gdm, kdm, etc.) will automatically start a GUI agent. You may see a GUI
  dialog box popup asking for a password during development. You should turn
  off any key agents during testing. The 'force_password' attribute will turn
  off public key authentication. This will only work if the remote SSH server
  is configured to allow password logins. Example of using 'force_password'
  attribute::
  
          s = pxssh.pxssh()
          s.force_password = True
          hostname = raw_input('hostname: ')
          username = raw_input('username: ')
          password = getpass.getpass('password: ')
          s.login (hostname, username, password)
  
  `debug_command_string` is only for the test suite to confirm that the string
  generated for SSH is correct, using this will not allow you to do
  anything other than get a string back from `pxssh.pxssh.login()`.
class_docstr_tok: ["This","class","extends","pexpect.spawn","to","specialize","setting","up","SSH","connections",".","This","adds","methods","for","login",",","logout",",","and","expecting","the","shell","prompt",".","It","does","various","tricky","things","to","handle","many","situations","in","the","SSH","login","process",".","For","example",",","if","the","session","is","your","first","login",",","then","pxssh","automatically","accepts","the","remote","certificate",";","or","if","you","have","public","key","authentication","setup","then","pxssh","wo","n't","wait","for","the","password","prompt",".","pxssh","uses","the","shell","prompt","to","synchronize","output","from","the","remote","host",".","In","order","to","make","this","more","robust","it","sets","the","shell","prompt","to","something","more","unique","than","just","$","or","#",".","This","should","work","on","most","Borne\/Bash","or","Csh","style","shells",".","Example","that","runs","a","few","commands","on","a","remote","server","and","prints","the","result",":",":","from","pexpect","import","pxssh","import","getpass","try",":","s","=","pxssh.pxssh","(",")","hostname","=","raw_input","(","'hostname",":","'",")","username","=","raw_input","(","'username",":","'",")","password","=","getpass.getpass","(","'password",":","'",")","s.login","(","hostname",",","username",",","password",")","s.sendline","(","'uptime","'",")","#","run","a","command","s.prompt","(",")","#","match","the","prompt","print","(","s.before",")","#","print","everything","before","the","prompt",".","s.sendline","(","'ls","-l","'",")","s.prompt","(",")","print","(","s.before",")","s.sendline","(","'df","'",")","s.prompt","(",")","print","(","s.before",")","s.logout","(",")","except","pxssh.ExceptionPxssh","as","e",":","print","(","``","pxssh","failed","on","login",".","''",")","print","(","e",")","Example","showing","how","to","specify","SSH","options",":",":","from","pexpect","import","pxssh","s","=","pxssh.pxssh","(","options=","{","``","StrictHostKeyChecking","''",":","``","no","''",",","``","UserKnownHostsFile","''",":","``","\/dev\/null","''","}",")","...","Note","that","if","you","have","ssh-agent","running","while","doing","development","with","pxssh","then","this","can","lead","to","a","lot","of","confusion",".","Many","X","display","managers","(","xdm",",","gdm",",","kdm",",","etc",".",")","will","automatically","start","a","GUI","agent",".","You","may","see","a","GUI","dialog","box","popup","asking","for","a","password","during","development",".","You","should","turn","off","any","key","agents","during","testing",".","The","'force_password","'","attribute","will","turn","off","public","key","authentication",".","This","will","only","work","if","the","remote","SSH","server","is","configured","to","allow","password","logins",".","Example","of","using","'force_password'","attribute",":",":","s","=","pxssh.pxssh","(",")","s.force_password","=","True","hostname","=","raw_input","(","'hostname",":","'",")","username","=","raw_input","(","'username",":","'",")","password","=","getpass.getpass","(","'password",":","'",")","s.login","(","hostname",",","username",",","password",")","`","debug_command_string","`","is","only","for","the","test","suite","to","confirm","that","the","string","generated","for","SSH","is","correct",",","using","this","will","not","allow","you","to","do","anything","other","than","get","a","string","back","from","`","pxssh.pxssh.login","(",")","`","."]
docstr: Sends exit to the remote shell.
  
  If there are stopped jobs then this automatically sends exit twice.
docstr_tok: ["Sends","exit","to","the","remote","shell",".","If","there","are","stopped","jobs","then","this","automatically","sends","exit","twice","."]
code: def logout(self):
      """Sends exit to the remote shell.
  
      If there are stopped jobs then this automatically sends exit twice.
      """
      self.sendline("exit")
      index = self.expect([EOF, "(?i)there are stopped jobs"])
      if index == 1:
          self.sendline("exit")
          self.expect(EOF)
      self.close()
  
file_path: catboost/contrib/python/pexpect/py3/pexpect/pxssh.py
imports: from pexpect import ExceptionPexpect, TIMEOUT, EOF, spawn
  import time
  import os
  import sys
  import re
label_desc: Use image node_id 6 for calling the pxssh obj's underlying member method code with example usage: obj.logout() without return types