外部库使用打印而不是退货

时间:2018-11-30 17:03:16

标签: python

我在脚本中使用的外部库有问题。

我从该库中执行一个函数,但是该函数直接打印输出。但是,我需要输出来检查其中是否有特定的字符串。

如何确保外部库中函数的输出包含变量,以便可以与字符串进行比较?

2 个答案:

答案 0 :(得分:2)

如果真的没有其他选择,则可以在调用库时重定向stdout。这是从answer改编而成的一段代码:

def some_library():
    print("Should probably return instead of print.")

import sys
from io import StringIO

class redirected_stdout:
    def __init__(self):
        self._stdout = None
        self._string_io = None

    def __enter__(self):
        self._stdout = sys.stdout
        sys.stdout = self._string_io = StringIO()
        return self

    def __exit__(self, type, value, traceback):
        sys.stdout = self._stdout

    @property
    def string(self):
        return self._string_io.getvalue()

with redirected_stdout() as out:
    some_library()
    result = out.string

print("return" in result)
# True

不过,修改该库会更加干净。

答案 1 :(得分:1)

您可以暂时与缓冲区交换sys.stdout,然后检查缓冲区。

$index