[utils] sanitize_open: Allow any IO stream as stdout

Fixes: https://github.com/yt-dlp/yt-dlp/issues/3298#issuecomment-1181754989
This commit is contained in:
pukkandan 2022-07-31 03:31:20 +05:30
parent a6bcaf71fc
commit daef791100
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39

View File

@ -598,7 +598,9 @@ def sanitize_open(filename, open_mode):
if filename == '-':
if sys.platform == 'win32':
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
# stdout may be any IO stream. Eg, when using contextlib.redirect_stdout
with contextlib.suppress(io.UnsupportedOperation):
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
return (sys.stdout.buffer if hasattr(sys.stdout, 'buffer') else sys.stdout, filename)
for attempt in range(2):