Python 如何在stdout/stderr中捕获提示?

Python 如何在stdout/stderr中捕获提示?,python,unix,haskell,pipe,tee,Python,Unix,Haskell,Pipe,Tee,我试图在日志文件中记录用户的终端会话;非常简单,我为ghci(interactive Haskell)制作了一个Python包装器,如下所示: #!/usr/bin/env python import os cmd = 'ghci 2>&1 | tee hs.log' os.system(cmd) $ ghci 2>$1 | tee hs.log GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help

我试图在日志文件中记录用户的终端会话;非常简单,我为
ghci
(interactive Haskell)制作了一个Python包装器,如下所示:

#!/usr/bin/env python

import os

cmd = 'ghci 2>&1 | tee hs.log'
os.system(cmd)
$ 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>
但是,这仅捕获打印回用户的内容,而不是用户输入的提示/内容。因此,如果会话看起来像:

#!/usr/bin/env python

import os

cmd = 'ghci 2>&1 | tee hs.log'
os.system(cmd)
$ 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
仅具有:

$ cat hs.log
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
3
7
如何在交互式终端会话期间捕获输出和输入?

您可以使用该命令捕获输入和输出

cmd = 'script hs.log ghci'

请注意,这将捕获终端的所有原始输入和输出。你会看到所有用户的编辑,如果程序是全屏的,你会看到所有的转义序列来移动光标。有关完整详细信息,请参阅链接文档。

请注意,
script
记录非规范(原始)用户输入,而不仅仅是stdin/out/err。例如,如果用户犯了一个错误并按下backspace键,那么所有内容,包括backspace字符,都会被记录下来。没有
脚本
,还有其他方法可以做到这一点吗?我只需要终端上的每一行输出,每一行换行符或任何东西。如果不编写您自己的位于用户和应用程序之间的程序,它就会读取用户输入并保存,然后再将其传输到应用程序。我不知道有什么简单的东西能做到这一点。