Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Проблема с обработкой условий Perl

Ответить
Настройки темы
Любой язык - Проблема с обработкой условий Perl

Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день.

Есть скрипт (вот его часть):
Код: Выделить весь код
unless(`smartctl -a /dev/sdb | grep Power_On_Hours` =~ m/- ([0-9a-zA-Z\ \:\-\+\.\,]+)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка Hourse sdb' ); }
my $smart_h_sdb = $1;

unless(`smartctl -a /dev/sda | grep Temperature_Celsius` =~ m/- ([0-9a-zA-Z\ \:\-\+\.\,]+)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка Temp sda' );}
my $smart_t_sda = $1;
Он выполняет некие команды для опроса устройств на удаленном ПК (hdd, процессор и т.д.) и результат выводит в csv файлик. Проблема в том что если устройство не доступно (например сгорел жесткий диск) и запрошенная команда не получает ожидаемый результат, то скрипт выплевывает в csv результат предыдущей успешно выполненной команды. Можно ли написать условие, в случае если команда не выполняется, то вернуть "NOT_INFO" например.

Отправлено: 12:29, 10-02-2020

 

Старожил


Сообщения: 247
Благодарности: 49

Профиль | Отправить PM | Цитировать


Armsinglom,

тема выплевывание в csv приведенным фрагментом не раскрыта

Отправлено: 07:04, 11-02-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как то так:

Код: Выделить весь код
use strict;
use utf8;

use Term::ANSIColor;
use Time::Piece;

binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";

our $inventory_host = '127.0.0.1';
our $inventory_port = 8080;

print "\n";

sub console {
  my %args = ( COLOR => 'white' , MOMENT => localtime->strftime('%Y/%m/%d %H:%M:%S') , MESSAGE => 'Нет сообщения' , @_ );
  print STDERR color($args{COLOR}) , $args{MOMENT} . ' ' , color('bold') , $args{MESSAGE} , color('reset') , "\n";
  }

sub request {
  my %args = ( DBASE => '', REQUEST => '', @_ );
  if( $args{DBASE} eq '' ) { die "Пустое имя БД"; }
  if( $args{REQUEST} eq '' ) { die "Пустой запрос"; }

  my %dictionary = ();

  my @linez = `psql -c "copy ($args{REQUEST}) to stdout with (format csv,header false);" $args{DBASE} postgres`;
  foreach my $line(@linez) {
    chomp $line; unless($line =~ m/^([^,]+),(.*)$/) { next; }
    $dictionary{$1} = [ split ',', $2 ];
    }

  return %dictionary;
  }

unless(`smartctl -a /dev/sdb | grep Power_On_Hours` =~ m/- ([0-9a-zA-Z\ \:\-\+\.\,]+)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка Hourse sdb' ); }
my $smart_h_sdb = $1;

unless(`smartctl -a /dev/sda | grep Temperature_Celsius` =~ m/- ([0-9a-zA-Z\ \:\-\+\.\,]+)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка Temp sda' );}
my $smart_t_sda = $1;

console( MESSAGE => "SMART T SDb: $smart_t_sda" );
console( MESSAGE => "SMART H SDb: $smart_h_sdb" );

if($inventory_host ne '') { `echo '"$smart_t_sda","$smart_h_sdb"' | nc -w 16 $inventory_host $inventory_port`; }

Отправлено: 09:49, 11-02-2020 | #3


Старожил


Сообщения: 247
Благодарности: 49

Профиль | Отправить PM | Цитировать


Armsinglom, для того чтобы не передавалось куда не надо
Код: Выделить весь код
$smart_h_sdb
и
Код: Выделить весь код
$smart_t_sda
надо их обнулять перед соответвтсущим тестом
типа
Код: Выделить весь код
our  $smart_t_sda = 'NO INFO';
unless(`smartctl -a /dev/sda | grep Temperature_Celsius` =~ m/- ([0-9a-zA-Z\ \:\-\+\.\,]+)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка Temp sda' );
  }
# MATCH HAPPENED -> $1 DEFINED
 $smart_t_sda = $1;
И аналогично с
Код: Выделить весь код
$smart_h_sdb

Отправлено: 04:29, 12-02-2020 | #4


Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


Попробовал, всё равно подставляется предыдущее значение.

Отправлено: 14:51, 12-02-2020 | #5


Старожил


Сообщения: 247
Благодарности: 49

Профиль | Отправить PM | Цитировать


Armsinglom, не могу поверить я так вам посоветовал
вот хорошая



Код: Выделить весь код
our $cnt = 0;
while ($cnt != 10 ) {

$res = 0;
$str = "counter: ${cnt}";
unless($str =~ m/counter: ([246])/) {
  print "this is \"error\" - skip capture\n";
  $res = 0;
} else {
  $res = $1;
}
$cnt++;
# print $cnt;
print "cnt=${cnt}\tres= ${res}\n";
}
~
Код: Выделить весь код
this is "error" - skip capture
cnt=1	res= 0
this is "error" - skip capture
cnt=2	res= 0
cnt=3	res= 2
this is "error" - skip capture
cnt=4	res= 0
cnt=5	res= 4
this is "error" - skip capture
cnt=6	res= 0
cnt=7	res= 6
this is "error" - skip capture
cnt=8	res= 0
this is "error" - skip capture
cnt=9	res= 0
this is "error" - skip capture
cnt=10	res= 0

Отправлено: 01:16, 13-02-2020 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Проблема с обработкой условий Perl

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Проблема с регуляркой (Perl) Armsinglom Скриптовые языки администрирования Windows 9 30-01-2020 09:42
Помогите с обработкой видео PoedemVSanFrancisko! Видео и аудио: обработка и кодирование 4 27-01-2014 08:32
проблема с обработкой Winnt.SIF во время установки WinXP c флешки MANtiCORE Автоматическая установка Windows 2000/XP/2003 6 14-09-2009 20:54
Проблемы с обработкой видео Ник-22 Видео и аудио: обработка и кодирование 6 06-07-2008 18:40
Проблема с обработкой груповых политик kapitanvagin Microsoft Windows NT/2000/2003 4 05-12-2007 08:21




 
Переход