Столкнулся с проблемой при отладке скрипта под RouterOS.
Не могу понять, определены или нет некоторые из локальных переменных.
Подскажите скрипт, как можно сбросить в файл список локальных переменных и их значения ?
Список локальных переменных
- podarok66
- Модератор
- Сообщения: 4355
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Локальная переменная живёт только в своей области. То есть скрипт закончил работу (даже с ошибкой) - переменные удалились. Что вы смотреть хотите?
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 5
- Зарегистрирован: 09 сен 2020, 20:42
Да, я понимаю, что значит локальные и пределы их видимости.
Но некоторые локальные переменные передает в скрипт ROS , а некоторые я определяю в скрипте сам. И хочу убедиться в проблемном месте все ли переменные таковы, как я предполагаю. Поэтому я и хочу вывести список определенных в данный момент переменных в файл или несколько файлов.
Но некоторые локальные переменные передает в скрипт ROS , а некоторые я определяю в скрипте сам. И хочу убедиться в проблемном месте все ли переменные таковы, как я предполагаю. Поэтому я и хочу вывести список определенных в данный момент переменных в файл или несколько файлов.
- podarok66
- Модератор
- Сообщения: 4355
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Ну хорошо, давайте так. Вы вставляете в нужном месте код типа этого:
В файле с именем 0.txt будет построчный список переменных и их значений на момент срабатывания кода. Но тягу к данному способу диагностики я не разделяю. Есть же лог, есть наконец команда прямого вывода в терминал :put Неужели какой-то код нельзя продебажить ими? Создание файла и запись туда на Микроте - то ещё развлечение.
Код: Выделить всё
/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";
}
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 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 ????????
: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 укладываются только глобальные переменные. Что-то я этот момент не знал. Я предполагал, что эта область хранит все переменные. В Вики на эту тему всё расплывчато :
Тогда только логами или, если отлаживать в терминале, то putEnvironment
....
Contains all user defined variables and their assigned values.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 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'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 5
- Зарегистрирован: 09 сен 2020, 20:42
У меня возник косяк в скрипте, когда я полагал, что локальная переменная определена, а на самом деле её не было, ошибка в имени.
Во вторых я полагал, что ROS передает мне в скрипт переменную, а оказалось, что её уже не было.
Поэтому мне было бы полезным иметь возможность посмотреть переменные в конкретном месте.
А в файле или в лог не принципиально.
Лог я каждый день отправляю в почту и очищаю.
Ситуация которую пытаюсь отловить возникает не каждый день, поэтому файл удобнее.
Попробую задать вопрос разработчикам.
Во вторых я полагал, что ROS передает мне в скрипт переменную, а оказалось, что её уже не было.
Поэтому мне было бы полезным иметь возможность посмотреть переменные в конкретном месте.
А в файле или в лог не принципиально.
Лог я каждый день отправляю в почту и очищаю.
Ситуация которую пытаюсь отловить возникает не каждый день, поэтому файл удобнее.
Попробую задать вопрос разработчикам.
- podarok66
- Модератор
- Сообщения: 4355
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
А вот теперь не понял. Хрен с ним, с Микротом. Ну на почте-то логи остаются. И в чём тогда дело? Проблема выеденного яйца не стоит и абсолютно надумана. Простите, тему я вынужден закрыть, как исчерпавшую себя более чем полностью.oleg.peredernin писал(а): ↑12 сен 2020, 18:01 Лог я каждый день отправляю в почту и очищаю.
Ситуация которую пытаюсь отловить возникает не каждый день, поэтому файл удобнее.
Говорильня ради говорильни не интересна.
![Селяне :se_lya_ne:](./images/smilies/boyan.gif)
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...