Перейти к основному содержимому

Справочник по CLI

Берёт .tdc-конфиг, генерирует данные и записывает результат в файл или stdout — без единой строчки кода.

tdcv2 <input.tdc> [options]
Откуда берётся tdcv2

npm 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>
./run demo.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 check demo.tdc
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

См. также