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

How to capture prompts in stdout/stderr?

我正在尝试在日志文件中记录用户的终端会话;相当简单,我为 ghci(交互式 Haskell)制作了一个 Python 包装器,看起来像:

#!/usr/bin/env python

import os

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

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

$ ghci 2> | 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

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

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

cmd = 'script hs.log ghci'

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