modal.io_streams

modal.io_streams.StreamReader

class StreamReader(typing.Generic)

Provides an interface to buffer and fetch logs from a stream (stdout or stderr).

As an asynchronous iterable, the object supports the async for statement.

Usage

from modal import Sandbox

sandbox = Sandbox.create(
    "bash",
    "-c",
    "for i in $(seq 1 10); do echo foo; sleep 0.1; done",
    app=app,
)
for message in sandbox.stdout:
    print(f"Message: {message}")

file_descriptor

@property
def file_descriptor(self):

read

def read(self) -> T:

Fetch and return contents of the entire stream. If EOF was received, return an empty string.

Usage

from modal import Sandbox

sandbox = Sandbox.create("echo", "hello", app=app)
sandbox.wait()

print(sandbox.stdout.read())

modal.io_streams.StreamWriter

class StreamWriter(object)

Provides an interface to buffer and write logs to a sandbox or container process stream (stdin).

def __init__(self, object_id: str, object_type: Literal["sandbox", "container_process"], client: _Client):

write

def write(self, data: Union[bytes, bytearray, memoryview, str]):

Writes data to stream’s internal buffer, but does not drain/flush the write.

This method needs to be used along with the drain() method which flushes the buffer.

Usage

from modal import Sandbox

sandbox = Sandbox.create(
    "bash",
    "-c",
    "while read line; do echo $line; done",
    app=app,
)
sandbox.stdin.write(b"foo\n")
sandbox.stdin.write(b"bar\n")
sandbox.stdin.write_eof()

sandbox.stdin.drain()
sandbox.wait()

write_eof

def write_eof(self):

Closes the write end of the stream after the buffered write data is drained. If the process was blocked on input, it will become unblocked after write_eof().

This method needs to be used along with the drain() method which flushes the EOF to the process.

drain

def drain(self):

Flushes the write buffer to the running process. Flushes the EOF if the writer is closed.