所以我知道
Redirecting stdout to "nothing" in python
您可以取消打印报表。但是以后可以撤消该命令,以便在某些点之后,确实会再次打印出打印语句吗?
例如,我们想要打印" b"但不是" a"。
我愿意:
import os
f = open(os.devnull, 'w')
sys.stdout = f
print("a")
# SOME COMMAND
print("b")
有人可以告诉我什么" SOM COMMAND"会是吗?
答案 0 :(得分:3)
原始sys.stdout
始终保留在sys.__stdout__
中:
sys.stdout = sys.__stdout__
但是,文档确实注意到显式保存原始sys.stdout
是首选:
它还可用于将实际文件还原到已知工作文件 对象,以防它们被破坏的对象覆盖。 但是,执行此操作的首选方法是明确保存 替换之前的上一个流,并恢复保存的对象。
答案 1 :(得分:2)
import os
import sys
f = open(os.devnull, 'w')
x = sys.stdout # save sys.stdout
sys.stdout = f
print("a")
sys.stdout = x # re-assign sys.stdout
print("b") # print 'b'
答案 2 :(得分:1)
从python 3.4开始,你可以这样做(见contextlib.redirect_stdout
)
public class MyClass {
private OtherClass otherClassInstance; // setter/constructor/autowire/whatever
public Response someMethod() {
Response response = Wrapper.wrap( () -> {
return otherClassInstance.doSomething(); // now that's testable
});
// .... do something else ....
return Response;
}
}
from contextlib import redirect_stdout
with redirect_stdout(None):
# stdout suppressed
# stdout restored
在with语句中被禁止。在stdout
上下文之外,您的with
已恢复。
顺便说一下:原始版本中不需要stdout
- f = open(os.devnull, 'w')
就像我最近学到的那样:why does sys.stdout = None work?。