code: def pseudo_raw_input(self, prompt: str) -> str:
          
          if self.use_rawinput:
              try:
                  if sys.stdin.isatty():
                      # Wrap in try since terminal_lock may not be locked when this function is called from unit tests
                      try:
                          # A prompt is about to be drawn. Allow asynchronous changes to the terminal.
                          self.terminal_lock.release()
                      except RuntimeError:
                          pass
  
                      # Deal with the vagaries of readline and ANSI escape codes
                      safe_prompt = rl_make_safe_prompt(prompt)
                      line = input(safe_prompt)
                  else:
                      line = input()
                      if self.echo:
                          sys.stdout.write('{}{}\n'.format(prompt, line))
              except EOFError:
                  line = 'eof'
              finally:
                  if sys.stdin.isatty():
                      # The prompt is gone. Do not allow asynchronous changes to the terminal.
                      self.terminal_lock.acquire()
          else:
              if self.stdin.isatty():
                  # on a tty, print the prompt first, then read the line
                  self.poutput(prompt, end='')
                  self.stdout.flush()
                  line = self.stdin.readline()
                  if len(line) == 0:
                      line = 'eof'
              else:
                  # we are reading from a pipe, read the line to see if there is
                  # anything there, if so, then decide whether to print the
                  # prompt or not
                  line = self.stdin.readline()
                  if len(line):
                      # we read something, output the prompt and the something
                      if self.echo:
                          self.poutput('{}{}'.format(prompt, line))
                  else:
                      line = 'eof'
  
          return line.strip()
docs: Began life as a copy of cmd's cmdloop; like raw_input but
  
          - accounts for changed stdin, stdout
          - if input is a pipe (instead of a tty), look at self.echo
            to decide whether to print the prompt and the input