Linia komend

import subprocess

cmd = [
    "avrdude",
    "-p", "m8a",
    "-c", "arduino",
    "-P", "/dev/ttyS0"
]

try:
    wynik = subprocess.run(
        cmd,
        capture_output=True,
        text=True,
        check=True
    )

    print("OK")
    print(wynik.stdout)

except subprocess.CalledProcessError as e:
    print("BŁĄD!")

    print("Kod:", e.returncode)

    print("STDOUT:")
    print(e.stdout)

    print("STDERR:")
    print(e.stderr)

Co robi check=True

Jeżeli program zakończy się kodem ≠ 0:

avrdude: ser_open(): can't open device

Python rzuci wyjątek:

subprocess.CalledProcessError

i trafisz do except.