我在脚本中使用的外部库有问题。
我从该库中执行一个函数,但是该函数直接打印输出。但是,我需要输出来检查其中是否有特定的字符串。
如何确保外部库中函数的输出包含变量,以便可以与字符串进行比较?
答案 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