簡體   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