Если что-то не работает
Команда ничего не делает и ничего не сообщает
Скорее всего вы набрали её на русском, а интерфейс английский: при английском интерфейсе переведённые имена не распознаются. Проверьте латинской формой:
Project Open "C:\Projects\Filter.gma"
Вторая причина — пробел внутри имени или пути. Возьмите его в кавычки.
Сравнение прочитанного значения не совпадает
Get отвечает тем написанием, которое видно в интерфейсе, поэтому
Preferences Get Grid.Mode под русской поставкой вернёт Адаптивный, а не
Adaptive, и сравнение с латинским литералом молча не сработает. Добавьте
флаг NoTranslation:
Preferences Get NoTranslation Grid.Mode
Он принимается у Get, Export и ExportValue. Записывающим командам не
нужен: Set и Import понимают обе формы.
Настройки, выгруженные на одной машине, не читаются на другой
Выгрузка в *.txt без флага содержит переведённые значения. Берите
*.ini или *.json — они языконезависимы всегда и покрывают больше
состояния, — либо выгружайте *.txt с флагом:
Preferences Export NoTranslation "C:\Work\prefs.txt"
Импорт настроек отвечает отказом, хотя файл на месте
Импорт неуспешен, если не применилась ни одна строка файла. Обычная причина — файл прочитан не той кодировкой: он превращается в набор строк, ни одна из которых не называет настройку. Проверьте, что файл сохранён в UTF-8 или UTF-16 с BOM; UTF-16 BE и UTF-32 без BOM не распознаются — см. Сценарии.
Вторая причина — файл пуст. Обе касаются только *.txt: пустой *.ini или
*.json импортируется как успешный.
Файл выгружен, но кодировка не та
Каждая команда пишет ту кодировку, которая нужна её читателю (журнал —
UTF-16, настройки — UTF-8, .cmd переменной окружения — OEM). Если файл
забирает инструмент с другими требованиями, назовите кодировку явно:
CommandProcessorLog Export Encoding=UTF-8 "C:\Work\log.txt"
Если команда отвечает, что кодировка не может представить часть содержимого,
это не сбой, а отказ писать испорченный файл: выберите Unicode либо
запросите языконезависимые значения флагом NoTranslation — тогда содержимое
остаётся латинским. Полные списки допустимых значений — на странице каждой
команды.
Если команда отвечает, что ключ Encoding= применим только к *.txt, так оно
и есть: *.json всегда UTF-8, а *.ini пишет QSettings — выбирать
кодировку там не из чего.
Сценарий не выполнился, код возврата 2
Код 2 означает, что файл не был прочитан: его нет, он пуст или сохранён в
однобайтовой кодировке. Пересохраните сценарий в UTF-8 или UTF-16 — см.
Сценарии.
Проверьте и путь: расширение должно быть именно .gcp, иначе приложение сочтёт
аргумент проектом или пакетным заданием.
Сценарий оборвался, код возврата 3
Сценарий начал выполняться, но одна из команд вернула неуспех либо
Break IfVariableIsNotDefined не нашёл переменную. Остаток файла не
выполняется — это штатное поведение.
Частый случай — Mode Get в самом начале: у свежего процесса режим
ещё не выбран, и команда отвечает отказом. Начинайте с Mode Set.
Где именно оборвался, покажет журнал команд, если сценарий его выгружает:
CommandProcessorLog Export "%GAMMA_EXPORT_DIR%\scenario.log"
Журнал содержит каждую строку сценария и ответ на неё. Если сценарий упал до этой строки, запустите его из окна командного процессора — там журнал виден сразу.
Смена языка не изменила имена команд
Список имён читается один раз при запуске, поэтому переведённые имена нового языка появляются только после перезапуска GAMMA — об этом приложение и предупреждает. Латинские имена работают всегда и от переключения не страдают: сценарий, написанный латиницей, продолжает работать.
Ответы при этом переводятся сразу, без перезапуска. Что именно меняется на ходу, а что заморожено — Смена языка во время работы.
После смены языка сценарий стал сравнивать не то
Переключение языка меняет язык ответов немедленно, поэтому значение,
прочитанное до Preferences Set General.Language, и значение, прочитанное
после, приходят на разных языках. Читайте с флагом NoTranslation — тогда
переключение на сравнения не влияет.
Выгруженный *.txt применился, но не весь
Если выгрузка сделана после смены языка на ходу, файл получается смешанным: обычные значения — на новом языке, названия единиц измерения — на старом (они заморожены до перезапуска). В другом экземпляре строка с единицами не распознаётся и молча пропускается, а импорт отвечает успехом, потому что отказом считается только импорт, не применивший ни одной строки.
Выгружайте с NoTranslation либо в *.ini/*.json.
FEMSolverSettings отвечает «Project is not open»
Настройки решателя принадлежат проекту, поэтому команда работает только при
открытом проекте. Добавьте Project Open или Project New перед ней.
CalculationResult Export отвечает «Нечего экспортировать»
Результатов ещё нет: расчёт не запускался, либо был прерван. Сначала
Solver Start.
Python: Cannot start Gamma application
- Проверьте, что запускаете интерпретатор из поставки GAMMA —
Bin\python.exeв каталоге установленной программы, а не сторонний Python: модульgammapyлежит рядом с ним и другому интерпретатору не виден. - Модуль запускает ту программу, вместе с которой он поставлен, —
Gamma.exeиз того же каталогаBin. Если этого файла там нет, установка повреждена: переустановите программу. - Убедитесь, что GAMMA запускается и обычным образом: всё, что мешает запуску (лицензия, отсутствующие библиотеки), помешает и здесь, только без окна с сообщением.
Python печатает ответ каждой команды
Это штатный режим. Отключается один раз в начале скрипта:
gamma.service.set_verbose_mode(app, False)
Скрипт завис и ничего не происходит
Сначала убедитесь, что это действительно зависание, а не долгий расчёт:
Solver Start на серьёзной задаче считает часами, и ожидание ответа таймаутом
не ограничено именно поэтому.
Если это Python — прервите ожидание Ctrl+C в консоли или кнопкой Stop в редакторе скриптов, и вы увидите, на какой команде скрипт остановился.
Команда, требующая ответа пользователя, в пакетном режиме не должна открывать
диалогов, но если это всё-таки произошло, ждать клиент будет бесконечно. Частая
причина — файл восстановления рядом с проектом (~tmp<Имя>.gma), оставшийся
после аварийного завершения. Удалите его и запустите сценарий заново.
Не удаётся подключиться к приложению по TCP
Порт не постоянен: сервер занимает свободный порт диапазона 37000–37999, выбирая его перебором со случайного места, а после каждого разрыва соединения поднимается на другом. Запомненный с прошлого раза порт работать не будет — ищите его заново при каждом подключении.
Пока клиент подключён, приложение не слушает вовсе, поэтому второй клиент подключиться не может. Если подключение не проходит, проверьте, не занято ли соединение другим скриптом.
Как узнать точный синтаксис команды
Встроенная справка всегда актуальнее документации:
Help
Help Project
Help FEMSolverSettings
Она построена из того же кода, который выполняет команды, и показывает флаги, аргументы, допустимые значения и примеры для вашей версии и поставки.