opendevin.runtime.docker.process
DockerProcess Objects
class DockerProcess(Process)
Represents a background command execution
__init__
def __init__(id: int, command: str, result, pid: int)
Initialize a DockerProcess instance.
Arguments:
id
int - The identifier of the command.command
str - The command to be executed.result
- The result of the command execution.pid
int - The process ID (PID) of the command.
parse_docker_exec_output
def parse_docker_exec_output(logs: bytes) -> Tuple[bytes, bytes]
When you execute a command using exec
in a docker container, the output produced will be in bytes. this function parses the output of a Docker exec command.
Example:
Considering you have a docker container named my_container
up and running
$ docker exec my_container echo "Hello OpenDevin!"
>> b'�������Hello OpenDevin!'
Such binary logs will be processed by this function.
The function handles message types, padding, and byte order to create a usable result. The primary goal is to convert raw container logs into a more structured format for further analysis or display.
The function also returns a tail of bytes to ensure that no information is lost. It is a way to handle edge cases and maintain data integrity.
>> output_bytes = b'�������Hello OpenDevin!' >> parsed_output, remaining_bytes = parse_docker_exec_output(output_bytes)
>> print(parsed_output) b'Hello OpenDevin!'
>> print(remaining_bytes) b''
Arguments:
logs
bytes - The raw output logs of the command.
Returns:
Tuple[bytes, bytes]: A tuple containing the parsed output and any remaining data.
read_logs
def read_logs() -> str
Read and decode the logs of the command.
This function continuously reads the standard output of a subprocess and processes the output using the parse_docker_exec_output function to handle binary log messages. It concatenates and decodes the output bytes into a string, ensuring that no partial messages are lost during reading.
Dummy Example:
>> cmd = 'echo "Hello OpenDevin!"' >> result = subprocess.Popen( cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, cwd='.' ) >> bg_cmd = DockerProcess(id, cmd = cmd, result = result, pid)
>> logs = bg_cmd.read_logs() >> print(logs) Hello OpenDevin!
Returns:
str
- The decoded logs(string) of the command.