Справочник по CLI
Берёт .tdc-конфиг, генерирует данные и записывает результат в файл или stdout — без единой строчки кода.
tdcv2 <input.tdc> [options]
tdcv2npm install -D tdcv2, pip install tdcv2 и cargo install tdcv2 кладут команду
tdcv2 в PATH из того же пакета, что несёт библиотеку. В Maven и NuGet аналога npm-ного
bin нет, поэтому у Java и C# командная строка — отдельный артефакт; вкладка для каждого
языка есть на странице Установка. Алиас делает все
команды на этой странице одинаковыми. Всё, что ниже, работает одинаково в любой
реализации.
Кроме генерации у CLI есть команды tdcv2 init и tdcv2 pack для настройки и данных —
см. Установку пакетов данных — а также
tdcv2 check (ниже) и tdcv2 format (ниже).
Опции
| Опция | Что делает |
|---|---|
-o, --output <path> | Пишет результат в файл. Без этой опции выводит в stdout |
--seed <seed> | Переопределяет seed из <env> |
--count <n> | Переопределяет count из <env> |
--locale <loc> | Переопределяет локаль (по умолчанию en) |
--now <date> | Фиксирует часы, по которым читают today, now и b_day |
--data-path <dir> | Добавляет папку данных для @data/… (можно повторять) |
--jobs <n> | Число рабочих потоков (по умолчанию TDC решает сам) |
--mode <memory|disk> | Движок: disk (по умолчанию) или memory |
--engine <1|2|3> | Форсировать конкретный движок (для продвинутых) |
--disk | То же, что --mode disk — и так по умолчанию |
--stream | Легаси-алиас для --engine 2 |
-h, --help | Показывает помощь |
-v, --version | Показывает версию |
Длинные опции можно писать и через =: tdcv2 demo.tdc --output=out.csv --count=100.
В примерах ниже используется вот такой demo.tdc:
<tdc>
<env count="10" seed="demo" local="en">
<sequence name="Id"><gen type="increment" value="1"/></sequence>
<sequence name="City"><gen type="text" value="Moscow,Berlin,Paris" order="sequential"/></sequence>
<sequence name="Status"><gen type="text" value="new,active,closed"/></sequence>
<before><line><data>Id,City,Status</data></line></before>
</env>
<block><line><data>${{Id}},${{City}},${{Status}}</data></line></block>
</tdc>
Id,City,Status 1,Moscow,closed 2,Berlin,new 3,Paris,closed 4,Moscow,new 5,Berlin,closed 6,Paris,new 7,Moscow,new 8,Berlin,active 9,Paris,active 10,Moscow,active
--seed — переопределить случайность
В конфиг зашит один сид, а вам нужен другой набор значений — не трогая файл.
--seed переопределяет его: столбцы со счётчиком (Id) и с перебором по кругу
(City) от сида не зависят, поэтому меняется только Status.
--count — сколько строк
--count 4 отрисует четыре строки. Позиционные столбцы (счётчик, текст по кругу) —
это префикс; столбцы с точными долями (percent, <mix>) и с уникальностью (uniq)
пересчитываются от нового общего количества.
См. Детерминизм и пропорции.
--output — записать в файл
-o (или --output) пишет результат в файл; в stdout при этом ничего не выводится:
tdcv2 demo.tdc -o out.csv
--locale — язык шаблонных данных
Шаблонные генераторы (имена, города) по умолчанию выдают английские данные;
--locale ru переключает весь файл на русский, позиция в позицию.
--now — зафиксировать часы
Часть генераторов смотрит на часы: value="today", value="now", person.b_day
(возрастное окно, отсчитанное назад от сегодня) и генератор date, которому не задали
границ. Так и задумано — день рождения, который едет вслед за сегодняшним днём, в этом и
смысл. Но часы становятся входом прогона наравне с конфигом и сидом — и единственным
входом, который нельзя записать. Тот же файл с тем же сидом завтра выдаст другие
строки.
--now записывает их:
tdcv2 people.tdc --seed demo --now 2026-04-23 -o out.csv
Запустите это через год — получите те же байты. Уберите флаг — и прогон возьмёт реальные часы, что и нужно в продакшене и не нужно в тесте.
Значение — дата в том же синтаксисе, который принимает <gen type="date" value="…">:
2026-04-23 или 2026-04-23T09:30:00, когда важен час. Часового пояса нет: все даты в
TDC — UTC. Значение, которое TDC прочитать не может, — это ошибка, а не молчаливый
возврат к реальным часам:
tdcv2: invalid --now "yesterday" — expected YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss (UTC)
--data-path — внешние данные
Когда конфиг читает src="@data/…", CLI нужно знать, где лежит папка data/. Она
передаётся через --data-path (опцию можно повторять — папки просматриваются по порядку):
tdcv2 demo.tdc --data-path ./data --data-path ./private-data -o out.csv
Обычный относительный путь src="names.txt" сначала ищется рядом с .tdc-файлом,
затем в папках из --data-path.
Скорость и движки — --jobs, --mode, --engine
Обычно ни один из этих флагов не нужен: TDC сам выбирает движок по конфигу и сам решает, распараллеливать ли генерацию. Коротко:
--jobs N— задать число рабочих потоков вручную. Это только про скорость: вывод байт-в-байт совпадает с однопоточным прогоном.--mode memory— маленький in-RAM движок (аварийный выход для небольших данных и объектного API). Он даёт свою последовательность значений — это другой движок, а не тот же результат.--engine 1|2|3— форсировать конкретный движок;--stream— легаси-алиас для--engine 2.
TDC сам прикидывает, сколько потоков поместится в оперативку этой машины, и берёт столько — на слабой машине запуск просто пойдёт медленнее, но не упадёт на середине. Подробнее — в разделе Большие объёмы.
tdcv2 check
Читает конфиг, проверяет его и ничего не генерирует. То, что нужно в pre-commit-хуке или в CI: отвечает на вопрос «а запустится ли это?», не тратя времени на сам запуск.
tdcv2 check demo.tdc
Всё уходит в stderr — на верный конфиг одна строка, на неверный те же диагностики, что напечатала бы обычная генерация. В stdout не уходит ничего, и это намеренно: stdout хука — это шум, а тот, кому нужны данные, запускает генератор.
tdcv2: demo.tdc is valid
Предупреждения проверку не заваливают — они печатаются, а код выхода остаётся 0, потому
что предупреждение описывает то, что работает, но, скорее всего, задумывалось иначе.
Кодом 1 завершается только ошибка.
tdcv2 format
Приводит .tdc в аккуратный вид — отступы, пробелы в атрибутах, выровненные таблицы
<map> — тот же форматтер, что и в редакторе.
tdcv2 format demo.tdc # печатает отформатированный конфиг в stdout
tdcv2 format -w demo.tdc # переписывает файл на месте (-w / --write)
Форматирование никогда не меняет то, что генерирует конфиг. Синтаксическая ошибка будет показана, а файл останется нетронутым (код выхода 1).
Коды выхода
| Код | Значение |
|---|---|
0 | Успешная генерация, --help или --version |
1 | Ошибка чтения, парсинга, валидации или выполнения |
2 | Неправильные аргументы CLI |
См. также
- Установка пакетов данных —
tdcv2 init,tdcv2 pack. - Большие объёмы —
--jobs,--mode,--engineподробно.