我使用以下方法测试bc
unix命令。。。它接受一个表达式,执行它并收回输出。。。你知道吗
def run_test(expr=""):
try:
process = sp.Popen('bc',
stdin=sp.PIPE,
stdout=sp.PIPE,
stderr=sp.PIPE)
process.stdin.write(expr)
result = process.stdout.readline()
process.stdin.close()
retval = process.wait()
return result
except Exception, e:
print e
# correct expression, returns '4'
print run_test('2+2\n')
但是,当我传递一个错误的表达式expr
时,我希望正确地处理错误,这样我就可以断言该expr
的测试用例正确地失败了。。。你知道吗
#never stops
print run_test('2 / 0\n')
但是,上面的表达式永远不会返回。。。我想返回一个值,例如false,它会告诉我表达式无效,然后当我断言时
assertTrue(run_test('2 / 0\n'), False)
会正常工作。。。我怎样才能做到呢?你知道吗
你最好的办法就是用python做一些事情 程序永远不能保证返回合理的东西。
下一个最好的方法是避免在交互模式下调用程序,但是 仅在命令行模式下。
之后,您可以尝试始终为正在调用的程序附加出口,例如对于bc use
process.stdin.write(expr + "\nquit\n")
。最后也是最坏的情况是启动一个计时器,如果表达式在计时器过期之前没有终止,则终止进程并给出超时错误。
发生的事情是stderr没有被正确重定向。在执行readline时,需要通过python提示符中的以下命令将stderr重定向到stdout。你需要把它移到你的功能上。你知道吗
医生说:http://docs.python.org/2/library/subprocess.html 一个特殊值,可用作Popen的stderr参数,并指示标准错误应与标准输出进入同一句柄。你知道吗
相关问题 更多 >
编程相关推荐