如何以编程方式向交互式Python注入行?
考虑这个小型交互式Python会话:如何以编程方式向交互式Python注入行?,python,Python,考虑这个小型交互式Python会话: >>> a = 'a' >>> b = 'b' >>> ab = a + b >>> ab 'ab' 有什么方法可以通过编程来实现吗?我想每行注入一行,最后对结果进行单元测试。我不能像往常一样创建Python脚本并执行它,因为在交互式Python中有些代码的反应不同(例如,inspect.getcomments())。我想在交互式Python中测试这种行为。我更喜欢Python3解决方
>>> a = 'a'
>>> b = 'b'
>>> ab = a + b
>>> ab
'ab'
有什么方法可以通过编程来实现吗?我想每行注入一行,最后对结果进行单元测试。我不能像往常一样创建Python脚本并执行它,因为在交互式Python中有些代码的反应不同(例如,inspect.getcomments())。我想在交互式Python中测试这种行为。我更喜欢Python3解决方案,但我怀疑该解决方案与Python2中的解决方案没有什么不同。一种方法是使用Python的模块。它本质上就像在Python REPL中一样解析代码,然后断言输出与在该REPL中编写的内容匹配
$ cat foo
>>> a = 'a'
>>> b = 'b'
>>> ab = a + b
>>> ab
'ab'
$ python -m doctest foo
$ cat > bar
>>> a = 'a'
>>> b = 'b'
>>> ab = b + a # oops
>>> ab
'ab'
$ python -m doctest bar
**********************************************************************
File "bar", line 4, in bar
Failed example:
ab
Expected:
'ab'
Got:
'ba'
**********************************************************************
1 items had failures:
1 of 4 in bar
***Test Failed*** 1 failures.
我不确定我是否明白。。。你能提供更多细节吗?为什么要对用户输入的代码进行单元测试???@SethMMorton:例如:。我想在交互式python中对inspect.getcomments()的行为进行单元测试。@kojiro:Awesome。这很有效。