[英]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.