theskumar / theskumar/python-dotenv

dotenv get exits with code 1 for empty string values

Offen Anfängerfreundlich
#699 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
8.9k
Forks
581
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Description

dotenv get KEY treats an empty string value as missing because the CLI uses a truthiness check (if stored_value:) instead of testing for key presence / None.

Empty values are valid in .env files (KEY= or KEY=""). The library API already returns them correctly via get_key / dotenv_values; only the CLI get command is wrong.

Steps to reproduce

import subprocess, sys, tempfile
from pathlib import Path
from dotenv import set_key

with tempfile.TemporaryDirectory() as directory:
    path = Path(directory) / ".env"
    set_key(path, "EMPTY", "")
    result = subprocess.run(
        [sys.executable, "-m", "dotenv", "-f", str(path), "get", "EMPTY"],
        capture_output=True,
        text=True,
    )
    print(result.returncode, repr(result.stdout))

Expected behavior

0 ''

(exit code 0, empty value printed)

Actual behavior

1 ''

(exit code 1 — same as a missing key)

dotenv get ZERO with ZERO=0 works (exit 0), so only falsy-but-present empty strings are affected.

Environment

  • python-dotenv: 1.2.3 (current main)
  • Python: 3.14
  • OS: Windows

Suggested fix

In src/dotenv/cli.py get, distinguish missing/None from an empty string, e.g. exit only when the key is absent or the stored value is None.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in src/dotenv/cli.py beim Befehl dotenv get und prüfe, wie zwischen einem fehlenden Schlüssel und einem leeren Wert unterschieden wird. Reproduziere das Problem mit dem Python-subprocess-Beispiel im Bericht; fertig ist es, wenn ein vorhandener leerer Wert eine leere Zeichenfolge ausgibt und mit Code 0 beendet wird, während ein fehlender Schlüssel weiterhin mit Code 1 beendet wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
cli
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
88/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.