CLI-приложения
CLI-приложения
Заголовок раздела «CLI-приложения»Создание инструментов командной строки, которые читают ввод, пишут вывод и взаимодействуют с пользователями.
Что создаём
Заголовок раздела «Что создаём»Простой CLI, который приветствует пользователя:
$ wippy run -x app:cliHello from CLI!Структура проекта
Заголовок раздела «Структура проекта»cli-app/├── wippy.lock└── src/ ├── _index.yaml └── cli.luaШаг 1: Создание проекта
Заголовок раздела «Шаг 1: Создание проекта»mkdir cli-app && cd cli-appmkdir srcШаг 2: Определения записей
Заголовок раздела «Шаг 2: Определения записей»Создайте src/_index.yaml:
version: "1.0"namespace: app
entries: # Terminal host связывает процессы с stdin/stdout - name: terminal kind: terminal.host lifecycle: auto_start: true
# CLI-процесс - name: cli kind: process.lua source: file://cli.lua method: main modules: - ioterminal.host соединяет ваш Lua-процесс с терминалом. Без него io.print() некуда писать.
Шаг 3: Код CLI
Заголовок раздела «Шаг 3: Код CLI»Создайте src/cli.lua:
local io = require("io")
local function main() io.print("Hello from CLI!") return 0end
return { main = main }Шаг 4: Запуск
Заголовок раздела «Шаг 4: Запуск»wippy initwippy run -x app:cliВывод:
Hello from CLI!-x автоматически определяет ваш terminal.host и запускается в тихом режиме для чистого вывода.
Чтение пользовательского ввода
Заголовок раздела «Чтение пользовательского ввода»local io = require("io")
local function main() io.write("Enter your name: ") local name = io.readline()
if name and #name > 0 then io.print("Hello, " .. name .. "!") else io.print("Hello, stranger!") end
return 0end
return { main = main }Цветной вывод
Заголовок раздела «Цветной вывод»Используйте ANSI escape-коды для цветов:
local io = require("io")
local reset = "\027[0m"local function red(s) return "\027[31m" .. s .. reset endlocal function green(s) return "\027[32m" .. s .. reset endlocal function yellow(s) return "\027[33m" .. s .. reset endlocal function cyan(s) return "\027[36m" .. s .. reset endlocal function bold(s) return "\027[1m" .. s .. reset end
local function main() io.print(bold(cyan("Welcome!"))) io.write(yellow("Enter a number: "))
local input = io.readline() local n = tonumber(input)
if n then io.print("Squared: " .. green(tostring(n * n))) return 0 else io.print(red("Error: ") .. "not a number") return 1 endend
return { main = main }Системная информация
Заголовок раздела «Системная информация»Доступ к статистике рантайма через модуль system:
# Добавьте к определению записиmodules: - io - systemlocal io = require("io")local system = require("system")
local function main() io.print("Host: " .. system.process.hostname()) io.print("CPUs: " .. system.runtime.cpu_count()) io.print("Goroutines: " .. system.runtime.goroutines())
local mem = system.memory.stats() io.print("Memory: " .. string.format("%.1f MB", mem.heap_alloc / 1024 / 1024))
return 0end
return { main = main }Именованные команды
Заголовок раздела «Именованные команды»Вместо использования -x app:cli вы можете зарегистрировать процесс как именованную команду:
- name: cli kind: process.lua meta: command: name: greet short: Greet the user source: file://cli.lua method: main modules: - ioТеперь запустите по имени:
wippy run greetСписок всех доступных команд:
wippy run listAvailable commands: greet Greet the userКоды завершения
Заголовок раздела «Коды завершения»Возвращайте значение из main() для установки кода завершения:
local function main() if error_occurred then return 1 -- Ошибка end return 0 -- УспехendСправочник I/O
Заголовок раздела «Справочник I/O»| Функция | Описание |
|---|---|
io.print(...) | Вывод в stdout с переводом строки |
io.write(...) | Вывод в stdout без перевода строки |
io.eprint(...) | Вывод в stderr с переводом строки |
io.readline() | Чтение строки из stdin |
io.flush() | Сброс буфера вывода |
Флаги CLI
Заголовок раздела «Флаги CLI»| Флаг | Описание |
|---|---|
wippy run -x app:cli | Запуск CLI-процесса (автоопределение terminal.host) |
wippy run -x app:cli --host app:term | Явное указание terminal host |
wippy run -x app:cli -v | С подробным логированием |
Следующие шаги
Заголовок раздела «Следующие шаги»- Модуль I/O — полный справочник по I/O
- Модуль System — информация о рантайме и системе
- Echo Service — многопроцессные приложения