从Python中访问/保存Python3脚本的标准输出

2024-04-19 14:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在兜圈子,想办法解决这个问题

我运行一个脚本,它调用pytest;在终端产生一些输出。这个想法是得到这个输出,然后把它放在一个变量中,这样我就可以把它保存到一个文件中,或者把它打印到某个地方(比如在一个tkinter标签对象中,如果我打算让脚本成为UI的一部分的话)

我确实找到了sys.stdout;但它似乎是用来在屏幕上打印的(本例中是控制台);这不是我要找的。我正在尝试读取发送到控制台并打印的内容

到目前为止,唯一的解决方案是在调用python脚本时从shell执行重定向;遗憾的是,考虑到我不需要脚本中所有操作的全部输出,而只需要pytest的输出,所以stdout和stderr对我来说并不是一个真正的选项。 我假设数据被缓冲在某个地方,然后发送到屏幕上打印,尽管我尝试使用sys.stdout时运气不佳

pytest文档中有一节提到了捕获stdout/stderr,但是要么没有包含一些重要的细节,要么我不知道这是如何工作的

def test_myoutput(capsys): # or use "capfd" for fd-level
    print("hello")
    sys.stderr.write("world\n")
    captured = capsys.readouterr()
    assert captured.out == "hello\n"
    assert captured.err == "world\n"
    print("next")
    captured = capsys.readouterr()
    assert captured.out == "next\n"

除此之外,还有一个名为capsys的对象,它有一个名为readouterr()的属性,它应该输出错误(我假设stdout有一个等价的属性);尽管capsys似乎根本不是pytest的一部分

任何建议都将不胜感激


Tags: 对象脚本helloworld屏幕pytest地方stderr