Удобство интерфейса CLI
Создавайте удобные инструменты командной строки: понятную справку, короткие флаги, коды завершения, stdout и stderr, базовый разбор и простую настройку подробности вывода.
«Удобство интерфейса CLI» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.
Основы удобного CLI
Цели:
- Показывать справку с помощью -h/--help
- Использовать понятные флаги (-i, -o, --verbose)
- Возвращать 0 при успехе и ненулевое значение при ошибке
- Отправлять результаты в stdout, а диагностические сообщения — в stderr
Использование и справка
Добавьте короткий раздел об использовании и принимайте короткие и длинные флаги; показывайте этот раздел, если входные данные отсутствуют.
using System;
// A tiny CLI that prints help if no args or -h/--help is passed.
public class Program
{
static void PrintUsage()
{
Console.WriteLine("usage: tool -i <input> [-o <output>] [--verbose]");
Console.WriteLine("options:");
Console.WriteLine(" -i, --input input file path (required)");
Console.WriteLine(" -o, --output output file path (optional)");
Console.WriteLine(" -h, --help show help");
Console.WriteLine(" --verbose print extra diagnostics to stderr");
}
public static void Main(string[] args)
{
if (args.Length == 0 || args[0] == "-h" || args[0] == "--help")
{
PrintUsage();
Environment.ExitCode = 0;
return;
}
Console.WriteLine("OK: arguments received"); // placeholder success
}
}
Флаги и коды завершения
Возвращайте ненулевое значение при недопустимых флагах; пишите короткие и конкретные сообщения. Выводите сообщение об успехе в stdout.
using System;
// Minimal manual parsing for beginners (no external libs).
public class Program
{
static void Error(string msg)
{
Console.Error.WriteLine("error: " + msg);
Environment.ExitCode = 1; // non-zero means failure
}
public static void Main(string[] args)
{
string input = null;
string output = null;
for (int i = 0; i < args.Length; i++)
{
string a = args[i];
if (a == "-i" || a == "--input")
{
if (i + 1 >= args.Length) { Error("missing value for " + a); return; }
input = args[++i];
}
else if (a == "-o" || a == "--output")
{
if (i + 1 >= args.Length) { Error("missing value for " + a); return; }
output = args[++i];
}
else if (a == "-h" || a == "--help")
{
Console.WriteLine("usage: tool -i <input> [-o <output>]");
return;
}
else
{
Error("unknown option: " + a);
return;
}
}
if (input == null) { Error("input is required (-i)"); return; }
// Success path: write result to stdout
Console.WriteLine("Processed " + input + (output == null ? "" : (" -> " + output)));
Environment.ExitCode = 0;
}
}
Stdout и stderr
Помещайте результаты в stdout (чтобы их можно было передавать по конвейеру), а диагностические сообщения — в stderr. Добавьте простой флаг --verbose.
using System;
// Show separation of streams: stdout (results) vs stderr (diagnostics).
public class Program
{
public static void Main(string[] args)
{
bool verbose = false;
for (int i = 0; i < args.Length; i++) if (args[i] == "--verbose") verbose = true;
if (verbose) Console.Error.WriteLine("info: starting work");
// pretend to compute a number
int result = 42;
// Result goes to stdout so it can be piped: tool ... > out.txt
Console.WriteLine(result);
if (verbose) Console.Error.WriteLine("info: finished work");
Environment.ExitCode = 0;
}
}
Соглашения и доработка
- Принимайте короткие и длинные флаги (-h/--help)
- Используйте понятные сообщения об ошибках (что произошло и как это исправить)
- Делайте вывод по умолчанию минимальным; добавляйте подробности с помощью --verbose
- Используйте единообразные коды завершения (0 — успех, 1 — недопустимые аргументы, 2 — ошибка ввода-вывода)
Быстрые тесты и документация
- Проверьте перенаправление: command > out.txt и command 2> err.txt
- Проверьте пути ошибок: отсутствующий файл, неправильные аргументы
- Укладывайте текст справки примерно в 5 строк на мобильном устройстве
- Документируйте примеры: их должно быть удобно копировать и вставлять
Потоки и коды завершения
Повторение
Повторение: справка по -h/--help, понятные флаги, правильные коды завершения и разделение stdout/stderr делают ваши инструменты удобными для скриптов и предсказуемыми.
Часто задаваемые вопросы
Урок «Удобство интерфейса CLI» бесплатный?
Да — полный текст урока «Удобство интерфейса CLI» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.
Чему я научусь в уроке «Удобство интерфейса CLI»?
Создавайте удобные инструменты командной строки: понятную справку, короткие флаги, коды завершения, stdout и stderr, базовый разбор и простую настройку подробности вывода. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Удобство интерфейса CLI»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Скрипты C# (dotnet script), фрагменты и REPL
- Основы взаимодействия с неуправляемым кодом (P/Invoke)
- Удобство интерфейса CLI