title: Python - Read User Input while Printing Output
body: <p>I'm trying to write a (command line) python program that will accept input from the user while still printing data above it. I am trying to make a chat program.</p>
  
  <p>Example:</p>
  
  <pre><code>[stuff prints here]
  hello
  warning: the time is 27:64
  
  Please enter your input: asdf
  </code></pre>
  
  <p>So I have typed the <code>asdf</code>, but while I am typing, the output above <em>continues</em> to update. If I want, I can continue to type while the output is being generated. Then if I press enter, something else happens. The input field should always stay <em>below</em> the the outputted text; if more text is displayed, the input field gets pushed down (but its contents remain in place).</p>
  
  <p>My thoughts were:</p>
  
  <ul>
  <li>This needs to be some sort of non-blocking read...</li>
  <li>...or maybe threading? One thread for input, one for output.</li>
  <li>Might I need to do some cursor manipulation (i.e. moving the cursor upwards, printing output, returning cursor to user input area)?</li>
  </ul>
  
  <p>I realize that a GUI would be much easier to do. I'll probably end up just doing this with tkinter. But I was nevertheless wondering if this sort of thing is possible in python on the command line.</p>
  
  <p>Thanks.</p>
  
  <p><strong>EDIT:</strong>
  I forgot to mention that I do know how to erase text with carriage returns (<code>\r</code>). The problem really is making sure that when I erase the line, I don't clear the user input: So if a new line comes up while I am typing, I don't want the input I have so far to be erased.</p>