看过其他stackoverflow帖子后,我似乎无法找出这个重定向问题。我想要做的是压制stdout和stderr,然后在捕获错误之后恢复它们。压制工作正常,但恢复他们只有一半作品。如果我试图压制并恢复stderr和stdout,那么压制就会起作用,但不会恢复。如果我只是试图压制/恢复标准输出它可以工作(但是我得到了所有我不想要的标准输入文本)。我无法推断为什么会有任何差异导致stderr阻止标准输出恢复,希望为什么可能是(或如果我做的事情奇怪/愚蠢)输入
继承人的代码,我想工作,但只抑制了/犯错,也不会恢复(“恢复标准输出”从不打印):恢复重定向sys.stdout和sys.stderr产生奇怪的结果
sys.stdout = None
sys.stderr = None
try:
op_args = op_parse.parse_args(selection.split(' '))
except SystemExit:
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
print("Restored stdout")
继承人抑制stdout和恢复它(在印刷讨厌的标准错误的成本)的代码
sys.stdout = None
#sys.stderr = None
try:
op_args = op_parse.parse_args(selection.split(' '))
except SystemExit:
sys.stdout = sys.__stdout__
#sys.stderr = sys.__stderr__
print("Restored stdout")
编辑:我想了一个窝周围,但我仍然对上述问题发生的原因感兴趣。我的工作是将stdout/stderr重新分配给= open(“/ dev/null”,“w”),它产生了我想要的行为。再次,我仍然想对原始问题的输入
感谢您的意见,我同意恢复需要发生在finally块中,在这个测试程序中我每次都故意给它一个错误,所以我没有打扰。在看到此消息之前,我发现了“/ dev/null”技巧,所以我可以确认您的解决方案是否有效。 (也op_parse不是opt_parse它只是一个不好的变量名称来代表'选项解析') – sliceOfPi