Posted on ::

pyZDL is a Python launcher for GZDoom and other Doom source ports.

Each profile bundles a source port, an IWAD, an ordered mod list, extra arguments, and optional config and save directories. Per-profile directories keep total conversions from overwriting each other's settings.

Features:

  • Searchable profile library with cover art and keyboard navigation
  • Ordered load list with enable/disable toggles and drag-and-drop
  • Automatic -deh handling for .deh and .bex patches

pyZDL profile tab

Splitting extra arguments

Profile arguments are typed as a single string, so the launcher has to split them the way a shell would. On Windows, shlex leaves surrounding quotes in place, so they are stripped by hand:

def split_args(value: Optional[str]) -> list[str]:
    """Split an argument string, respecting quotes and multiple spaces."""
    if not value:
        return []
    try:
        parts = shlex.split(value, posix=(os.name != "nt"))
    except ValueError as exc:
        raise LoaderError(f"Could not parse extra arguments: {exc}") from exc
    if os.name == "nt":
        # shlex in non-POSIX mode leaves surrounding quotes in place.
        parts = [
            (
                part[1:-1]
                if len(part) >= 2 and part[0] == part[-1] and part[0] in "\"'"
                else part
            )
            for part in parts
        ]
    return parts

Downloads:

Source on GitHub

Table of Contents