For granular control, use the PTY class. This allows you to manage the pseudoterminal lifecycle, resize the console, and handle raw byte input/output.
Key Operations:
- Initialization:
PTY(cols, rows) starts a new winpty-agent process of a specific size. - Spawning:
process.spawn(command) starts a console process (e.g., cmd.exe) inside the PTY. - I/O: Use
process.read() for output and process.write(bytes) for input. - Resizing:
process.set_size(cols, rows) updates the terminal dimensions. - Lifecycle:
process.isalive() checks status; del process ends the winpty-agent process.
from winpty import PTY
# Start a new winpty-agent process of size (cols, rows)
cols, rows = 80, 25
process = PTY(cols, rows)
# Spawn a new console process, e.g., CMD
process.spawn(br'C:\windows\system32\cmd.exe')
# Read console output (Unicode)
process.read()
# Write input to console (Unicode)
process.write(b'Text')
# Resize console size
new_cols, new_rows = 90, 30
process.set_size(new_cols, new_rows)
# Know if the process is alive
alive = process.isalive()
# End winpty-agent process
del process