src/streamlink_cli/main.py
def read_stream(stream, output, prebuffer, chunk_size=8192):
    """Reads data from stream and then writes it to the output."""
    is_player = isinstance(output, PlayerOutput)
    is_http = isinstance(output, HTTPServer)
    is_fifo = is_player and output.namedpipe
    show_progress = isinstance(output, FileOutput) and output.fd is not stdout and sys.stdout.isatty()
    show_record_progress = hasattr(output, "record") and isinstance(output.record, FileOutput) and output.record.fd is not stdout and sys.stdout.isatty()

    stream_iterator = chain(
        [prebuffer],
        iter(partial(stream.read, chunk_size), b"")
    )
    if show_progress:
        stream_iterator = progress(stream_iterator,
                                   prefix=os.path.basename(args.output))
    elif show_record_progress:
        stream_iterator = progress(stream_iterator,
                                   prefix=os.path.basename(args.record))

    try:
        for data in stream_iterator:
            # We need to check if the player process still exists when
            # using named pipes on Windows since the named pipe is not
            # automatically closed by the player.
            if is_win32 and is_fifo:
                output.player.poll()

                if output.player.returncode is not None:
                    log.info("Player closed")
                    break

            try:
                output.write(data)
            except IOError as err:
                if is_player and err.errno in ACCEPTABLE_ERRNO:
                    log.info("Player closed")
                elif is_http and err.errno in ACCEPTABLE_ERRNO:
                    log.info("HTTP connection closed")
                else:
                    console.exit("Error when writing to output: {0}, exiting", err)

                break
    except IOError as err:
        console.exit("Error when reading from stream: {0}, exiting", err)
    finally:
        stream.close()
        log.info("Stream ended")
def read_stream(stream, output, prebuffer, chunk_size=8192):
    is_player = isinstance(output, PlayerOutput)
    is_http = isinstance(output, HTTPServer)
    is_fifo = is_player and output.namedpipe
    show_progress = isinstance(output, FileOutput) and output.fd is not stdout and sys.stdout.isatty()
    show_record_progress = hasattr(output, "record") and isinstance(output.record, FileOutput) and output.record.fd is not stdout and sys.stdout.isatty()

    stream_iterator = chain(
        [prebuffer],
        iter(partial(stream.read, chunk_size), b"")
    )
    if show_progress:
        stream_iterator = progress(stream_iterator,
                                   prefix=os.path.basename(args.output))
    elif show_record_progress:
        stream_iterator = progress(stream_iterator,
                                   prefix=os.path.basename(args.record))

    try:
        for data in stream_iterator:
            # We need to check if the player process still exists when
            # using named pipes on Windows since the named pipe is not
            # automatically closed by the player.
            if is_win32 and is_fifo:
                output.player.poll()

                if output.player.returncode is not None:
                    log.info("Player closed")
                    break

            try:
                output.write(data)
            except IOError as err:
                if is_player and err.errno in ACCEPTABLE_ERRNO:
                    log.info("Player closed")
                elif is_http and err.errno in ACCEPTABLE_ERRNO:
                    log.info("HTTP connection closed")
                else:
                    console.exit("Error when writing to output: {0}, exiting", err)

                break
    except IOError as err:
        console.exit("Error when reading from stream: {0}, exiting", err)
    finally:
        stream.close()
        log.info("Stream ended")
def read_stream ( stream , output , prebuffer , chunk_size = 8192 ) : is_player = isinstance ( output , PlayerOutput ) is_http = isinstance ( output , HTTPServer ) is_fifo = is_player and output . namedpipe show_progress = isinstance ( output , FileOutput ) and output . fd is not stdout and sys . stdout . isatty ( ) show_record_progress = hasattr ( output , "record" ) and isinstance ( output . record , FileOutput ) and output . record . fd is not stdout and sys . stdout . isatty ( ) stream_iterator = chain ( [ prebuffer ] , iter ( partial ( stream . read , chunk_size ) , b"" ) ) if show_progress : stream_iterator = progress ( stream_iterator , prefix = os . path . basename ( args . output ) ) elif show_record_progress : stream_iterator = progress ( stream_iterator , prefix = os . path . basename ( args . record ) ) try : for data in stream_iterator : # We need to check if the player process still exists when # using named pipes on Windows since the named pipe is not # automatically closed by the player. if is_win32 and is_fifo : output . player . poll ( ) if output . player . returncode is not None : log . info ( "Player closed" ) break try : output . write ( data ) except IOError as err : if is_player and err . errno in ACCEPTABLE_ERRNO : log . info ( "Player closed" ) elif is_http and err . errno in ACCEPTABLE_ERRNO : log . info ( "HTTP connection closed" ) else : console . exit ( "Error when writing to output: {0}, exiting" , err ) break except IOError as err : console . exit ( "Error when reading from stream: {0}, exiting" , err ) finally : stream . close ( ) log . info ( "Stream ended" )
Reads data from stream and then writes it to the output.
Reads data from stream and then writes it to the output .