From daef7911000bea69407667de8193eafcdcdad36b Mon Sep 17 00:00:00 2001
From: pukkandan <pukkandan.ytdlp@gmail.com>
Date: Sun, 31 Jul 2022 03:31:20 +0530
Subject: [PATCH] [utils] sanitize_open: Allow any IO stream as stdout

Fixes: https://github.com/yt-dlp/yt-dlp/issues/3298#issuecomment-1181754989
---
 yt_dlp/utils.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index fcc25388d8..bdab9fb499 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -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):