Analice argumentos CLI mediante una especificación
Convierta una lista de argumentos de línea de comandos en un objeto predecible sin repartir reglas de análisis por toda su aplicación.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Proporcione los elementos y una especificación compacta que defina cada indicador booleano y cada opción con valor. El analizador resuelve alias en nombres canónicos, conserva argumentos posicionales, identifica indicadores desconocidos, admite opciones largas con signo igual y deja de interpretar opciones tras el separador convencional de doble guion. Las especificaciones incorrectas, los argumentos duplicados y las opciones que carecen de un valor obligatorio producen errores de entrada claros.
Describa la interfaz de comandos como datos
Comience con los elementos tal como los entrega el entorno de ejecución, tras retirar el nombre del ejecutable y el del script. Después, defina cada argumento aceptado en la especificación. Cada entrada contiene un nombre canónico, uno o varios alias y un tipo. Use flag para un indicador cuya presencia signifique verdadero, como <code>--verbose</code>. Use option cuando deba seguirle un valor, como <code>--output result.json</code>. Los alias permiten que las formas corta y larga alimenten la misma propiedad: <code>-o</code> y <code>--output</code> pueden generar <code>output</code>. Los nombres canónicos utilizan letras minúsculas, dígitos y guiones bajos, de modo que el objeto devuelto pueda consumirse sin otro proceso de renombrado. Los alias deben comenzar con uno o dos guiones. El analizador rechaza nombres canónicos y alias duplicados porque esas colisiones harían que el resultado dependiera del orden de declaración. Active <code>multiple</code> solo cuando la interfaz permita repetir el argumento; los valores se devolverán entonces según el orden de aparición.
Comprenda el análisis y el resultado
El resultado separa tres elementos: valores reconocidos, elementos posicionales e indicadores desconocidos. Los indicadores reconocidos se convierten en verdadero bajo su nombre canónico, mientras que las opciones guardan el elemento siguiente. Una opción larga también puede incorporar su valor, por ejemplo <code>--format=json</code>. La coincidencia es exacta; combinaciones cortas como <code>-abc</code> no se descomponen salvo que esa forma completa figure como alias. Todo elemento no reconocido que empiece por guion se añade a <code>unknown_flags</code>, para que usted pueda rechazarlo, mostrar una advertencia o reenviarlo deliberadamente. Los demás elementos no reconocidos se consideran posicionales. Un <code>--</code> independiente termina el análisis de opciones y convierte todos los elementos posteriores en posicionales, aunque comiencen por guion. Este escape convencional elimina la ambigüedad de archivos como <code>-draft.txt</code>. El analizador no inventa valores predeterminados ni convierte cadenas en números, pues esas políticas pertenecen a la aplicación y podrían ocultar errores. El resultado es determinista y conserva el orden.
Gestione valores ausentes y repeticiones con seguridad
Toda entrada de tipo option exige un valor no vacío cada vez que aparece uno de sus alias. Si el alias es el último elemento, precede al separador de fin de opciones o va seguido de otro elemento con forma de indicador, el análisis falla con un error de entrada que identifica el alias problemático. La misma regla se aplica a una forma adjunta vacía como <code>--output=</code>. Esta conducta estricta evita consumir por accidente el siguiente indicador como si fuera un dato y trata directamente uno de los fallos más perjudiciales del análisis de comandos. Un guion aislado sí puede utilizarse como valor, algo útil cuando un programa representa la entrada o salida estándar mediante <code>-</code>. De forma predeterminada, repetir un argumento reconocido también produce un error. Declare <code>multiple: true</code> cuando la repetición sea válida, como sucede con varias rutas de inclusión o etiquetas; el nombre canónico contendrá siempre una lista. Los indicadores desconocidos se notifican sin provocar el fallo, por lo que usted conserva el control de compatibilidad y reenvío.
Qué puede hacer con ella
Valide un envoltorio de CLI
Analice las opciones propias del envoltorio y notifique indicadores no admitidos antes de iniciar el proceso subyacente.
Normalice opciones cortas y largas
Asocie alias como -o y --output con una única propiedad estable para simplificar la lógica de la aplicación.
Cree vistas previas y pruebas
Convierta listas de elementos en fixtures estructurados y deterministas sin ejecutar comandos ni acceder a un shell.
Preguntas frecuentes
¿Cuánto cuesta?
Cada solicitud API cuesta $0.002. La versión del navegador ejecuta localmente la misma lógica determinista.
¿Se rechazan los indicadores desconocidos?
No. Se devuelven en unknown_flags para que usted pueda rechazarlos, advertir sobre ellos o reenviarlos.
¿Admite la sintaxis --name=value?
Sí, para opciones largas que reciben valor. Un valor vacío después del signo igual provoca un error.
¿Combina indicadores cortos como -abc?
No. Los alias coinciden con elementos completos, por lo que -abc solo se reconoce si la especificación declara exactamente ese alias.
¿Qué ocurre después de un doble guion independiente?
Termina el análisis de opciones y todos los elementos restantes se devuelven como argumentos posicionales.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"args": [
"--verbose",
"--output=result.json",
"input.txt"
],
"spec": [
{
"name": "verbose",
"aliases": [
"--verbose",
"-v"
],
"kind": "flag"
},
{
"name": "output",
"aliases": [
"--output",
"-o"
],
"kind": "option"
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.cli_arg_parse_spec",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |