diff --git a/meme_otron/__main__.py b/meme_otron/__main__.py index e707291..7884d43 100644 --- a/meme_otron/__main__.py +++ b/meme_otron/__main__.py @@ -41,7 +41,7 @@ if __name__ == "__main__": except IOError as e: print(f"Cannot read '{input_file}': {e}", file=sys.stderr) sys.exit(1) - elif not sys.stdin.isatty(): + elif utils.is_stdin_ready(): input_data = utils.read_stream(sys.stdin.buffer) img, errors = meme_otron.compute(*sys.argv[1:], input_data=input_data, wmark=wmark, debug=debug) diff --git a/meme_otron/utils.py b/meme_otron/utils.py index 291344a..3711b10 100644 --- a/meme_otron/utils.py +++ b/meme_otron/utils.py @@ -1,4 +1,5 @@ import re +import select import sys from urllib.request import urlopen from urllib.error import URLError @@ -220,6 +221,13 @@ def safe_index(src: Union[str, list], pattern, start: int = 0): # region bytes utils +def is_stdin_ready() -> bool: + """ + https://stackoverflow.com/questions/3762881/how-do-i-check-if-stdin-has-some-data + """ + return sys.stdin.isatty() and select.select([sys.stdin, ], [], [], 0.0)[0] + + def read_stream(stream: BinaryIO) -> bytes: output_data = bytearray() for line in stream: