繁体   English   中英

抑制打印为stdout python

[英]suppressing print as stdout python

好的..所以可能一个例子是解释这个问题的好方法

所以我有这样的事情:

if __name__=="__main__"
    result = foobar()
    sys.stdout.write(str(result))
    sys.stdout.flush()
    sys.exit(0)

现在这个脚本是从ruby脚本调用的..基本上它在那里解析结果。 但是foobar()有很多打印声明..而且stdout也刷新了所有这些打印件。 有没有办法(除了记录mathods)我可以在这里修改一些自动抑制那些打印的东西,只是刷新这个结果? 谢谢

您想暂时隐藏(或隐藏)stdout。 像这样的东西:

actualstdout = sys.stdout
sys.stdout = StringIO()
result = foobar()
sys.stdout = actualstdout
sys.stdout.write(str(result))
sys.stdout.flush()
sys.exit(0)

您需要为sys.stdout分配类似文件的内容,以便其他方法可以有效地使用它。 StringIO是一个很好的候选者,因为它不需要磁盘访问(它只会在内存中收集)然后被丢弃。

使用Python 3.4及更高版本,您可以使用redirect_stdout contextmanager,如下所示:

with redirect_stdout(open(os.devnull, "w")):
    print("This text goes nowhere")
print("This text gets printed normally")
import sys

class output:
    def __init__(self):
        self.content = []
    def write(self, string):
        self.content.append(string)


if __name__=="__main__":

    out = output()                   
    sys.stdout = out                   #redirecting the output to a variable content

    result = foobar()
    sys.stdout.write(str(result))
    sys.stdout.flush() 

    sys.stdout = sys.__stdout__        #redirecting the output back to std output   
    print "o/p of foo :",out.content

    sys.exit(0)

此链接显示如何在python中重定向stdout 将其重定向到内部管道,然后读取您的管道并过滤掉不需要的线路。 这将让你只保留你感兴趣的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM