Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Проблема с выводом в Perl скрипте

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
#!/usr/bin/perl
 
@sensoroutput=`/usr/bin/sensors`;
$inp = shift @ARGV;
 
foreach(@sensoroutput) {
  chomp();
  split();
  if ( $_[0] eq $inp ) {
        $outstr = $_[1]
  }
}
 
$outstr =~ s/\+//;
$outstr =~ s/\В°C//;
 
print "$outstr\n";
 
Данный скрипт предназначен для поставки данных в CACTI. Утилита sensors температурные показатели выводит нормально. При запуске скрипта, вручную, оный ничего не выводит, пустая строка. Я в Perl не разбираюсь, может кто прояснит чего в скрипте не так, чтоб он заработал. Все это вертиться под убунтой серваком 12.04

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 16:16 17-02-2014 | Исправлено: Cheery, 10:58 18-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
astrolon

Цитата:
Утилита sensors температурные показатели выводит нормально.

в каком виде?
покажите как запускаете и что выдает

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:03 17-02-2014
astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сделал файл sensors.pl исполняемым и пробую запустить вручную, скрипт выводит пустую строку, а должен выводить отформатированные данные из sensors, как я понял.
 
root@Zews:/usr/share/cacti/site/scripts# ./sensors.pl
 
root@Zews:/usr/share/cacti/site/scripts#
 
Запускаю отдельно /usr/bin/sensors нормально инфу выводит
 
w83627ehf-isa-0290
Adapter: ISA adapter
Vcore:        +1.37 V  (min =  +0.00 V, max =  +1.74 V)
in1:          +1.89 V  (min =  +0.30 V, max =  +0.29 V)  ALARM
AVCC:         +3.06 V  (min =  +2.98 V, max =  +3.63 V)
+3.3V:        +3.09 V  (min =  +2.98 V, max =  +3.63 V)
in4:          +1.56 V  (min =  +0.06 V, max =  +0.30 V)  ALARM
in5:          +1.63 V  (min =  +1.90 V, max =  +0.02 V)  ALARM
in6:          +0.10 V  (min =  +1.28 V, max =  +0.14 V)  ALARM
3VSB:         +3.09 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:         +3.18 V  (min =  +2.70 V, max =  +3.30 V)
in9:          +0.10 V  (min =  +0.52 V, max =  +0.18 V)  ALARM
fan1:           0 RPM  (min =   54 RPM, div = 128)  ALARM
fan2:        2789 RPM  (min = 4687 RPM, div = 4)  ALARM
fan3:           0 RPM  (min =   77 RPM, div = 128)  ALARM
fan5:           0 RPM  (min = 10546 RPM, div = 128)  ALARM
temp1:        +16.0°C  (high = +33.0°C, hyst = -120.0°C)  sensor = thermistor
temp2:        +16.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = diode
temp3:        +48.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
cpu0_vid:    +0.000 V
intrusion0:  ALARM
 

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 10:45 18-02-2014 | Исправлено: astrolon, 10:49 18-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
astrolon
ваш скрипт ожидает параметр, который должен быть ему указан - именно его он из вывода сенсора и выбирает
 

Цитата:
$inp = shift @ARGV;

берет первый аргумент из указанный после .pl в строке запуска
 

Цитата:
if ( $_[0] eq $inp )  

и ищет его в выводимых параметрах  
 

Цитата:
$outstr = $_[1]

присваивает значение этого параметра переменной
 

Цитата:
$outstr =~ s/\+//;  
$outstr =~ s/\В°C//;

обрабатывает строку
 
и

Цитата:
print "$outstr\n";

выводит
 
так что вызывать скрипт надо как
./sensors.pl название_интересуемого_параметра
 
как пример
./sensors.pl fan1
 
ps: давно на perl не писал, сложно быстро переключаться, когда пишешь на куче языков, но  
split();  
 
может там
split(/:/);    
 
?
 
хотя, конечно, смотря что нужно - строка значений целиком или первая цифра )
тогда  
 
./sensors.pl fan1:

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:06 18-02-2014 | Исправлено: Cheery, 11:18 18-02-2014
astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо за ответ и за то, что расписали работу скрипта. Попробовал так:
./sensors.pl fan1: и без :, один ответ "нет такого файла или каталога"
 

Цитата:
хотя, конечно, смотря что нужно - строка значений целиком или первая цифра

хоть что-нибудь.

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 12:33 18-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
astrolon

Цитата:
один ответ "нет такого файла или каталога"

ну так значит запускаете ./sensors.pl не из его каталога.
 
перейдите в /usr/share/cacti/site/scripts и запускайте скрипт оттуда, либо указывайте полный путь.
либо исполняемый файл считывания с сенсоров удалили/переместили/переименовали

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 12:39 18-02-2014 | Исправлено: Cheery, 12:44 18-02-2014
astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, оплошал. Когда запускаю из своего каталога ./sensors.pl без аргумента, - пустая строка, а когда пишу аргумент, - команда не найдена.
 
root@Zews:/usr/share/cacti/site/scripts# ./sensors.pl
 
root@Zews:/usr/share/cacti/site/scripts# sensors.pl fan1:
sensors.pl: команда не найдена
root@Zews:/usr/share/cacti/site/scripts# sensors.pl fan1
sensors.pl: команда не найдена
root@Zews:/usr/share/cacti/site/scripts# sensors.pl fan
sensors.pl: команда не найдена
root@Zews:/usr/share/cacti/site/scripts#

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 12:48 18-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
astrolon
а ./ кто будет указывать перед файлом? либо дайте ему сразу права на исполнение
например  
chmod 555 sensors.pl
тогда ./ перед названием скрипта не понадобится

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 12:49 18-02-2014 | Исправлено: Cheery, 12:51 18-02-2014
astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
если запускаю так, то пустые строки:
 
root@Zews:/usr/share/cacti/site/scripts# ./sensors.pl fan1:
 
root@Zews:/usr/share/cacti/site/scripts# ./sensors.pl fan1
 
root@Zews:/usr/share/cacti/site/scripts# ./sensors.pl fan
 
root@Zews:/usr/share/cacti/site/scripts# ./sensors.pl temp1:
 

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 12:51 18-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
astrolon
сенсоров у меня в виртуалке нет, поэтому сделал считывание из файла.
 
вот это сработало, не знаю почему ваш вариант не хочет, но split не переписывает $_ переменную
 

Код:
foreach(@sensoroutput) {
  chomp;
  @temp = split;
  if ( @temp[0] eq $inp ) {
        $outstr = @temp[1];
  }
}

 
ps: ну и лучше так, чтобы удалял градусы - они впритык идут..
$outstr =~ s/°C//;


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:35 18-02-2014 | Исправлено: Cheery, 23:03 18-02-2014
astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
С вашими изменениями все отлично работает. Огромное спасибо!

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 17:30 19-02-2014
astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery, все таки знаний моих не хватает по perl, не могу добиться, чтобы вывод был в таком формате:имя поля указанное в качестве аргумента, потом : и значение.
 
./sensors.pl temp1: выдает, например 17.0, а надо temp1:17.0

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 11:16 20-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
astrolon
зачем, если вы его и так задаете?
 

Цитата:
 $outstr = @temp[1];

на  
$outstr = @temp[0] . @temp[1];

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:24 20-02-2014
astrolon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cacti требует, чтобы значению каждого из полей предшествовало его имя.
Имя и значения каждого поля должны быть отделены друг от друга символом':'.  
Я назвал поля TEMP0, TEMP1, FAN0, FAN1 и FAN2 соответственно.

Всего записей: 13 | Зарегистр. 01-10-2008 | Отправлено: 16:53 20-02-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Проблема с выводом в Perl скрипте


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru