Browse Source

Add fallback for unavailable stdout/stderr

Sylvia van Os 6 years ago
parent
commit
3de8957b9f
1 changed files with 22 additions and 3 deletions
  1. 22 3
      dulwich/porcelain.py

+ 22 - 3
dulwich/porcelain.py

@@ -61,7 +61,7 @@ from contextlib import (
     closing,
     contextmanager,
 )
-from io import BytesIO
+from io import BytesIO, RawIOBase
 import datetime
 import os
 import posixpath
@@ -139,8 +139,27 @@ from dulwich.server import (
 GitStatus = namedtuple('GitStatus', 'staged unstaged untracked')
 
 
-default_bytes_out_stream = getattr(sys.stdout, 'buffer', sys.stdout)
-default_bytes_err_stream = getattr(sys.stderr, 'buffer', sys.stderr)
+class NoneStream(RawIOBase):
+    """Fallback if stdout or stderr are unavailable, does nothing."""
+    def read(size=-1):
+        return None
+
+    def readall():
+        return None
+
+    def readinto(b):
+        return None
+
+    def write(b):
+        return None
+
+
+default_bytes_out_stream = getattr(
+        sys.stdout, 'buffer', sys.stdout
+    ) or NoneStream
+default_bytes_err_stream = getattr(
+        sys.stderr, 'buffer', sys.stderr
+    ) or NoneStream
 
 
 DEFAULT_ENCODING = 'utf-8'