模拟交互式Python会话

6 投票
1 回答
1192 浏览
提问于 2025-04-18 07:18

我想知道怎么模拟一个Python的交互式会话,用文件里的输入,并保存下这个会话的记录。换句话说,如果我有一个文件叫做sample.py

#
# this is a python script
#
def foo(x,y):
   return x+y

a=1
b=2

c=foo(a,b)

c

我想得到一个叫sample.py.out的文件,内容大概是这样的(Python的欢迎信息可以省略):

>>> #
... # this is a python script
... #
... def foo(x,y):
...    return x+y
... 
>>> a=1
>>> b=2
>>> 
>>> c=foo(a,b)
>>> 
>>> c
3
>>> 

我试过把标准输入(stdin)传给Python,Twitter上有人建议用'bash脚本',但没有详细说明(我在bash里玩过script命令,但没成功)。我觉得这应该很简单,但我可能漏掉了什么。难道我需要用exec写个解析器之类的吗?

用Python或ipython的解决方案都可以。而且我可能还想把结果转成html格式,并在网页浏览器里高亮显示,但那是另一个问题……

1 个回答

8

我觉得 code.interact 应该可以用:

from __future__ import print_function
import code
import fileinput


def show(input):
    lines = iter(input)

    def readline(prompt):
        try:
            command = next(lines).rstrip('\n')
        except StopIteration:
            raise EOFError()
        print(prompt, command, sep='')
        return command

    code.interact(readfunc=readline)


if __name__=="__main__":
    show(fileinput.input())

(我更新了代码,使用了 fileinput,这样它就可以从 stdinsys.argv 读取数据,并且可以在 Python 2 和 3 下运行。)

撰写回答