def stdchannel_redirected(stdchannel, dest_filename):
""" A context manager to temporarily redirect stdout or stderr
:param stdchannel: the channel to redirect
:type stdchannel: sys.std
:param dest_filename: the filename to redirect output to
:type dest_filename: os.devnull
:return: nothing
:rtype: None
"""
try:
oldstdchannel = os.dup(stdchannel.fileno())
dest_file = open(dest_filename, 'w')
os.dup2(dest_file.fileno(), stdchannel.fileno())
yield
finally:
if oldstdchannel is not None:
os.dup2(oldstdchannel, stdchannel.fileno())
if dest_file is not None:
dest_file.close()
评论列表
文章目录