外部库使用打印而不是返回

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

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

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


牧羊人nacy
浏览 164回答 2
2回答

守着星空守着你

您可以暂时将 sys.stdout 与您的缓冲区交换,然后检查缓冲区。def external_method():  print ("print something out, don't return")class MyBuffer(object):  def __init__(self):    self.buffer = []  def write(self, *args, **kwargs):    self.buffer.append(args)import sysold_stdout = sys.stdoutsys.stdout = MyBuffer()external_method()my_buffer, sys.stdout = sys.stdout, old_stdoutprint (my_buffer.buffer)

互换的青春

如果你真的别无选择,你可以stdout在调用库时重定向。这是改编自此答案的一段代码:def some_library():    print("Should probably return instead of print.")import sysfrom io import StringIOclass 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.stringprint("return" in result)# True不过,修改库会更干净。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python