How to capture prompts in stdout/stderr?
Question: I'm trying to record a user's terminal session in a log file; fairly simply, I
made a Python wrapper for `ghci` (interactive Haskell) that looks like:

    
    
    #!/usr/bin/env python
    
    import os
    
    cmd = 'ghci 2>&1 | tee hs.log'
    os.system(cmd)
    

However, this only captures what is printed _back_ to the user, and not the
prompts/what the user has typed in. So if the session looks like:

    
    
    $ ghci 2>$1 | tee hs.log
    GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
    Prelude> 1+2
    3
    Prelude> 3+4
    7
    Prelude>
    

`hs.log` only has:

    
    
    $ cat hs.log
    GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
    3
    7
    

How do you capture both the output and the input during an interactive
terminal session?


Answer: You can use the [`script`](http://man7.org/linux/man-pages/man1/script.1.html)
command to capture both input and output.

    
    
    cmd = 'script hs.log ghci'
    

Note that this captures all the raw input and output from the terminal. You'll
see all the user's editing, and if the program is full-screen you'll see all
its escape sequences to move the cursor around. See the linked documentation
for full details.

