Kommandozeilenargumente nach Spezifikation parsen
Wandeln Sie ein rohes Array von Kommandozeilenargumenten in ein verlässliches Objekt um, ohne Parserregeln über Ihre gesamte Anwendung zu verteilen.
Im Browser ausführen – kostenlos
Läuft direkt in Ihrem Browser – kostenlos. Ihre Datei verlässt Ihren Browser nicht und wird an keinen Server übertragen.
Übergeben Sie die Elemente zusammen mit einer kompakten Spezifikation für jeden booleschen Schalter und jede wertbehaftete Option. Der Parser führt Aliasse auf kanonische Namen zurück, bewahrt Positionsargumente, erkennt unbekannte Schalter, unterstützt lange Optionen mit Gleichheitszeichen und beendet die Optionsauswertung nach dem üblichen Doppelstrich. Fehlerhafte Spezifikationen, doppelt verwendete Argumente und Optionen ohne erforderlichen Wert führen zu eindeutigen Eingabefehlern.
Beschreiben Sie die Kommandozeilenschnittstelle als Daten
Beginnen Sie mit den Argumentelementen, wie sie die Laufzeit nach dem Entfernen des Programm- und Skriptnamens liefert. Definieren Sie danach jedes zulässige Argument in der Spezifikation. Jeder Eintrag besitzt einen kanonischen Namen, mindestens einen Alias und eine Art. Verwenden Sie flag für einen Schalter, dessen Vorhandensein wahr bedeutet, beispielsweise <code>--verbose</code>. Verwenden Sie option, wenn auf die Schreibweise ein Wert folgen muss, etwa <code>--output result.json</code>. Durch Aliasse befüllen kurze und lange Schreibweisen dieselbe kanonische Eigenschaft; somit können <code>-o</code> und <code>--output</code> beide <code>output</code> ergeben. Kanonische Namen bestehen aus Kleinbuchstaben, Ziffern und Unterstrichen, damit Sie das Ergebnis ohne weitere Umbenennung verarbeiten können. Aliasse müssen mit einem oder zwei Bindestrichen beginnen. Der Parser lehnt doppelte kanonische Namen und Aliasse ab, weil solche Kollisionen das Ergebnis von der Deklarationsreihenfolge abhängig machen würden. Setzen Sie <code>multiple</code> nur, wenn Wiederholungen beabsichtigt sind; die Werte erscheinen dann in der Reihenfolge ihres Auftretens.
Verstehen Sie die Elementauswertung und das Ergebnis
Das Ergebnis trennt erkannte Werte, Positionselemente und unbekannte Schalter. Erkannte Schalter werden unter ihrem kanonischen Namen wahr, während Optionen das nachfolgende Element speichern. Eine lange Option kann ihren Wert auch im selben Element tragen, wie bei <code>--format=json</code>. Es gilt eine exakte Übereinstimmung; kurze Bündel wie <code>-abc</code> werden nur dann erkannt, wenn die gesamte Schreibweise als Alias hinterlegt ist. Jedes unbekannte Element, das mit einem Bindestrich beginnt, wird an <code>unknown_flags</code> angehängt. Sie können es dadurch ablehnen, eine Warnung anzeigen oder es gezielt weiterreichen. Andere unbekannte Elemente gelten als Positionswerte. Ein einzelnes <code>--</code> beendet die Optionsauswertung; sämtliche folgenden Elemente sind dann positionell, auch wenn sie mit einem Bindestrich beginnen. Diese übliche Maskierung macht Dateinamen wie <code>-draft.txt</code> eindeutig. Der Parser erfindet keine Standardwerte und wandelt Zeichenfolgen nicht in Zahlen um, denn solche Regeln gehören in die Anwendung und könnten Fehler verbergen. Das Ergebnis ist deterministisch und erhält die Reihenfolge.
Behandeln Sie fehlende Werte und Wiederholungen sicher
Jeder Eintrag der Art option verlangt bei jedem Auftreten eines Alias einen nicht leeren Wert. Steht der Alias am Ende, unmittelbar vor dem Endemarkierer oder vor einem weiteren schalterförmigen Element, bricht die Auswertung mit einem Eingabefehler ab, der den betroffenen Alias nennt. Dieselbe Regel gilt für eine leere verbundene Form wie <code>--output=</code>. Dieses strenge Verhalten verhindert, dass ein nachfolgender Schalter unbemerkt als Datenwert verbraucht wird, und beseitigt damit einen besonders folgenreichen Fehler bei der Argumentauswertung. Ein einzelner Bindestrich bleibt als Wert zulässig; Programme verwenden <code>-</code> häufig für die Standardeingabe oder Standardausgabe. Standardmäßig ist auch die Wiederholung eines erkannten Arguments ein Fehler. Deklarieren Sie <code>multiple: true</code>, wenn mehrere Vorkommen erlaubt sind, etwa für mehrere Include-Pfade oder Kennzeichnungen; der kanonische Name enthält dann stets ein Array. Unbekannte Schalter werden lediglich gemeldet und lösen keinen Abbruch aus, sodass die Anwendung ihre Richtlinie für Kompatibilität und Weiterleitung selbst festlegt.
Anwendungsfälle
Prüfen Sie einen CLI-Wrapper
Werten Sie Wrapper-Optionen aus und melden Sie nicht unterstützte Schalter, bevor Sie den umschlossenen Prozess starten.
Vereinheitlichen Sie kurze und lange Optionen
Führen Sie Aliasse wie -o und --output auf eine stabile Eigenschaft zurück und vereinfachen Sie die Anwendungslogik.
Erstellen Sie Vorschauen und Tests
Wandeln Sie Elementarrays in strukturierte, deterministische Fixtures um, ohne einen Befehl oder eine Shell auszuführen.
Häufige Fragen
Was kostet die Nutzung?
Jede API-Anfrage kostet $0.002. Die Browserversion führt dieselbe deterministische Logik lokal aus.
Werden unbekannte Schalter abgelehnt?
Nein. Sie werden in unknown_flags zurückgegeben, damit Sie sie ablehnen, melden oder weiterreichen können.
Wird die Schreibweise --name=value unterstützt?
Ja, bei langen Optionen mit Wert. Ein leerer Wert nach dem Gleichheitszeichen führt zu einem Fehler.
Werden kurze Schalter wie -abc gebündelt?
Nein. Aliasse entsprechen vollständigen Elementen; -abc wird nur erkannt, wenn genau dieser Alias deklariert wurde.
Was geschieht nach einem alleinstehenden Doppelstrich?
Die Optionsauswertung endet und alle verbleibenden Elemente werden als Positionsargumente zurückgegeben.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev2/cli-arg-parse-spec \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"args":["--verbose","--output=result.json","input.txt"],"spec":[{"name":"verbose","aliases":["--verbose","-v"],"kind":"flag"},{"name":"output","aliases":["--output","-o"],"kind":"option"}]}'const res = await fetch("https://api.kit.forhosting.com/dev2/cli-arg-parse-spec", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"args": [
"--verbose",
"--output=result.json",
"input.txt"
],
"spec": [
{
"name": "verbose",
"aliases": [
"--verbose",
"-v"
],
"kind": "flag"
},
{
"name": "output",
"aliases": [
"--output",
"-o"
],
"kind": "option"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/cli-arg-parse-spec",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"args": [
"--verbose",
"--output=result.json",
"input.txt"
],
"spec": [
{
"name": "verbose",
"aliases": [
"--verbose",
"-v"
],
"kind": "flag"
},
{
"name": "output",
"aliases": [
"--output",
"-o"
],
"kind": "option"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/cli-arg-parse-spec", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"args":["--verbose","--output=result.json","input.txt"],"spec":[{"name":"verbose","aliases":["--verbose","-v"],"kind":"flag"},{"name":"output","aliases":["--output","-o"],"kind":"option"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"args":["--verbose","--output=result.json","input.txt"],"spec":[{"name":"verbose","aliases":["--verbose","-v"],"kind":"flag"},{"name":"output","aliases":["--output","-o"],"kind":"option"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/cli-arg-parse-spec", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"args": [
"--verbose",
"--output=result.json",
"input.txt"
],
"spec": [
{
"name": "verbose",
"aliases": [
"--verbose",
"-v"
],
"kind": "flag"
},
{
"name": "output",
"aliases": [
"--output",
"-o"
],
"kind": "option"
}
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.cli_arg_parse_spec",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |