Warning

This documentation is actively being updated as the project evolves and may not be complete in all areas.

PySerial driver

jumpstarter-driver-pyserial provides functionality for serial port communication.

Installation

$ pip3 install --extra-index-url https://pkg.jumpstarter.dev/simple jumpstarter-driver-pyserial

Configuration

Example configuration:

export:
  serial:
    type: jumpstarter_driver_pyserial.driver.PySerial
    config:
      url: "/dev/ttyUSB0"
      baudrate: 115200
      cps: 10  # Optional: throttle to 10 characters per second

Config parameters

Parameter

Description

Type

Required

Default

url

The serial port to connect to, in pyserial format

str

yes

baudrate

The baudrate to use for the serial connection

int

no

115200

check_present

Check if the serial port exists during exporter initialization, disable if you are connecting to a dynamically created port (i.e. USB from your DUT)

bool

no

True

cps

Characters per second throttling limit. When set, data transmission will be throttled to simulate slow typing. Useful for devices that can’t handle fast input

float

no

None

CLI Commands

The pyserial driver provides two CLI commands for interacting with serial ports:

start_console

Start an interactive serial console with direct terminal access.

j serial start-console

Exit the console by pressing CTRL+B three times.

pipe

Pipe serial port data to stdout or a file. Automatically detects if stdin is piped and enables bidirectional mode.

When stdin is used, commands are sent until EOF, then continues monitoring serial output until Ctrl+C.

# Log serial output to stdout
j serial pipe

# Log serial output to a file
j serial pipe -o serial.log

# Send command to serial, then continue monitoring output
echo "hello" | j serial pipe

# Send commands from file, then continue monitoring output
cat commands.txt | j serial pipe -o serial.log

# Force bidirectional mode (interactive)
j serial pipe -i

# Append to log file instead of overwriting
j serial pipe -o serial.log -a

# Disable stdin input even when piped
cat data.txt | j serial pipe --no-input

Options

  • -o, --output FILE: Write serial output to a file instead of stdout

  • -i, --input: Force enable stdin to serial port (auto-detected if piped)

  • --no-input: Disable stdin to serial port, even if stdin is piped

  • -a, --append: Append to output file instead of overwriting

Exit with Ctrl+C.

API Reference

class jumpstarter_driver_pyserial.client.PySerialClient

A client for handling serial communication using pexpect.

close()

Close the open stream session without a context manager.

open() fdspawn

Open a pexpect session. You can find the pexpect documentation here: https://pexpect.readthedocs.io/en/stable/api/pexpect.html#spawn-class

Returns:

fdspawn: The pexpect session object.

open_stream() BlockingStream

Open a blocking stream session without a context manager.

Returns:

blocking stream session object.

Return type:

BlockingStream

pexpect()

Create a pexpect adapter context manager.

Yields:

PexpectAdapter: The pexpect adapter object.

stream(method='connect')

Open a blocking stream session with a context manager.

Parameters:

method (str) – method name of streaming driver call

Returns:

blocking stream session object context manager.

Examples

Using expect with a context manager

with pyserialclient.pexpect() as session:
    session.sendline("Hello, world!")
    session.expect("Hello, world!")

Using expect without a context manager

session = pyserialclient.open()
session.sendline("Hello, world!")
session.expect("Hello, world!")
pyserialclient.close()

Using a simple BlockingStream with a context manager

with pyserialclient.stream() as stream:
    stream.send(b"Hello, world!")
    data = stream.receive()

Using a simple BlockingStream without a context manager

stream = pyserialclient.open_stream()
stream.send(b"Hello, world!")
data = stream.receive()