如何捕获stdout / stderr中的提示?

时间:2016-06-03 21:53:35

标签: python unix haskell pipe tee

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

#!/usr/bin/env python

import os

cmd = 'ghci 2>&1 | tee hs.log'
os.system(cmd)

但是,这只会捕获向用户打印的 back ,而不是用户输入的提示/内容。所以如果会话看起来像:

$ 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

如何在交互式终端会话期间捕获输出和输入?

1 个答案:

答案 0 :(得分:3)

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

cmd = 'script hs.log ghci'

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