模拟交互式python会话

时间:2014-05-22 14:12:32

标签: python

如何使用文件的输入来模拟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 script'没有细节(在bash中使用脚本命令播放,没有欢乐)。我觉得应该很容易,而且我错过了一些简单的事情。我是否需要使用exec或其他东西编写解析器?

Python或ipython解决方案没问题。然后我可能希望转换为HTML和语法在Web浏览器中突出显示它,但这是另一个问题....

1 个答案:

答案 0 :(得分:7)

我认为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下运行。)