Список локальных переменных

Описание каждой версии, обсуждение особенностей и недостатков
Закрыто
oleg.peredernin
Сообщения: 5
Зарегистрирован: 09 сен 2020, 20:42

Столкнулся с проблемой при отладке скрипта под RouterOS.
Не могу понять, определены или нет некоторые из локальных переменных.
Подскажите скрипт, как можно сбросить в файл список локальных переменных и их значения ?


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Локальная переменная живёт только в своей области. То есть скрипт закончил работу (даже с ошибкой) - переменные удалились. Что вы смотреть хотите?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
oleg.peredernin
Сообщения: 5
Зарегистрирован: 09 сен 2020, 20:42

Да, я понимаю, что значит локальные и пределы их видимости.
Но некоторые локальные переменные передает в скрипт ROS , а некоторые я определяю в скрипте сам. И хочу убедиться в проблемном месте все ли переменные таковы, как я предполагаю. Поэтому я и хочу вывести список определенных в данный момент переменных в файл или несколько файлов.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну хорошо, давайте так. Вы вставляете в нужном месте код типа этого:

Код: Выделить всё

/file print file=0.txt; 
:delay 1; 
/file set "0.txt" content=""; 
:foreach u in=[system script environment find name!=""] do={
:local t [([system script environment get $u name]." - ".[system script environment get $u value])]; 
:local n [/file get "0.txt" contents]; 
/file set "0.txt" contents="$n\n$t"; 
}
В файле с именем 0.txt будет построчный список переменных и их значений на момент срабатывания кода. Но тягу к данному способу диагностики я не разделяю. Есть же лог, есть наконец команда прямого вывода в терминал :put Неужели какой-то код нельзя продебажить ими? Создание файла и запись туда на Микроте - то ещё развлечение.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
oleg.peredernin
Сообщения: 5
Зарегистрирован: 09 сен 2020, 20:42

Сделал скрипт по Вашему образцу:

:local VarStr "123";

/file print file=0.txt;
:delay 1;
/file set "0.txt" content="";
:foreach u in=[system script environment find name!=""] do={
:local t [([system script environment get $u name]." - ".[system script environment get $u value])];
:local n [/file get "0.txt" contents];
/file set "0.txt" contents="$n\n$t";
}


Файл создался, но он содержал только мои глобальные переменный. Переменной VarStr в нём не было.

# sep/11/2020 13:59:50 by RouterOS 6.47.3
# software id = 618H-PCLU
#
# NAME VALUE
0 RandomOrg ????????
1 TelegramSend ????????


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Мдя, в Environment укладываются только глобальные переменные. Что-то я этот момент не знал. Я предполагал, что эта область хранит все переменные. В Вики на эту тему всё расплывчато :
Environment
....
Contains all user defined variables and their assigned values.
Тогда только логами или, если отлаживать в терминале, то put


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
oleg.peredernin
Сообщения: 5
Зарегистрирован: 09 сен 2020, 20:42

Есть ли возможность задать этот вопрос разработчикам ROS или они немногословные небожители ?


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Да можно, почему же нет. На официальном форуме пожалуйста. Только вот зачем вам именно это, вы так и не пояснили. Ну можно же использовать конструкции типа

Код: Выделить всё

:local VarStr "123";
:log info $VarStr
Или такие , если в Терминале

Код: Выделить всё

{
:local VarStr "123";
:put $VarStr
}
Если вам нужно записать в файл значение локальной переменной, ну пишите напрямую

Код: Выделить всё

:local VarStr "123";

/file print file=0.txt;
:delay 1;
/file set "0.txt" content="$VarStr";
Если дописывать в существующий с новой строки, то так

Код: Выделить всё

:local VarStr "123";
:local n [/file get "0.txt" contents]; 
/file set "0.txt" contents="$n\n$t";
Зачем именно то извращение, которое вы заказали в стартовом посте?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
oleg.peredernin
Сообщения: 5
Зарегистрирован: 09 сен 2020, 20:42

У меня возник косяк в скрипте, когда я полагал, что локальная переменная определена, а на самом деле её не было, ошибка в имени.
Во вторых я полагал, что ROS передает мне в скрипт переменную, а оказалось, что её уже не было.
Поэтому мне было бы полезным иметь возможность посмотреть переменные в конкретном месте.
А в файле или в лог не принципиально.
Лог я каждый день отправляю в почту и очищаю.
Ситуация которую пытаюсь отловить возникает не каждый день, поэтому файл удобнее.
Попробую задать вопрос разработчикам.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

oleg.peredernin писал(а): 12 сен 2020, 18:01 Лог я каждый день отправляю в почту и очищаю.
Ситуация которую пытаюсь отловить возникает не каждый день, поэтому файл удобнее.
А вот теперь не понял. Хрен с ним, с Микротом. Ну на почте-то логи остаются. И в чём тогда дело? Проблема выеденного яйца не стоит и абсолютно надумана. Простите, тему я вынужден закрыть, как исчерпавшую себя более чем полностью.
Говорильня ради говорильни не интересна. :se_lya_ne:


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Закрыто