为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牧羊人nacy 2021-09-02 16:11:47
我在脚本中使用的外部库有问题。我从这个库中执行一个函数,但该函数直接打印输出。但是,我需要输出来检查其中是否有特定的字符串。如何确保外部库中函数的输出来自一个变量,以便我可以与字符串进行比较?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您可以暂时将 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 sys

old_stdout = sys.stdout

sys.stdout = MyBuffer()

external_method()

my_buffer, sys.stdout = sys.stdout, old_stdout

print (my_buffer.buffer)


查看完整回答
反对 回复 2021-09-02
?
互换的青春

TA贡献1797条经验 获得超6个赞

如果你真的别无选择,你可以stdout在调用库时重定向。这是改编自此答案的一段代码:


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

不过,修改库会更干净。


查看完整回答
反对 回复 2021-09-02
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信