Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перехватить системную ошибку 
:(
    Опции темы
korob2001
Дата 19.3.2004, 04:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



Всем, привет!
Ради тренировки, написал программу в которой дескрипторы STDIN, STDOUT и STDERR связываю с файлами, как показано ниже:

STDIN - 'infile.txt'
STDOUT - 'outfile.txt'
STDERR - 'errfile.txt'

В файле infile.txt прописаны команды Командной строки. После выполнения программы, в файл outfile.txt записываются результаты команд прописаных в файле infile.txt, а в файл errfile.txt ошибки, которые возникли при выполнении системных комад и самой программы.

Так как, в файл outfile.txt символы кирилицы записывались досовской кодировке, я решил написать небольшой класс, цель методов которого, перекодировать символы полученной строки из одной кодировки в другую и вернуть уже перекодированную строку. Но для того что бы он мог перекодировать, одному из его методов необходимо передать строку а результат сохранить в переменную. С файлом outfile.txt проблем не возникло, зато в файл errfile.txt все записи, где есть символы кирилицы, прописываются в дос-кодировке. sad.gif

Как перехватить системную ошибку и сохранить её в переменной, для дальнейшей обработки и затем вывести эту, уже обработанную, ошибку в STDERR?

Заранее спасибо,
Денис

Это сообщение отредактировал(а) korob2001 - 19.3.2004, 13:33


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Arush
Дата 29.3.2004, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.11.2003

Репутация: нет
Всего: 1



Ты наверно имеешь в виду не "перехватить системную ошибку" а "перхватить текст сообщения об ошибке" ?
IMHO проще всего открыть какой-нибудь пайп, дескриптор для записи назначить как stderr, из дескриптора для чтения читать, перекодировать в нужную кодировку и записывать на диск(причем для пайпа это наверно можно будет сделать один раз - в конце программы).

Удачи

Александр
PM MAIL   Вверх
korob2001
Дата 30.3.2004, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



To Arush
Насколько я понимаю в конце программы нужно сделать что-то подобное:
Код

open(INERR, "< errfile.txt") or die $!;
 open(OUTERR, "> errfile.txt.back" ) or die $!;
    while ( <INERR> ) {
       chomp;
       # обрабатываем строки
       print OUTERR $_, "\n";
    }
 close(OUTERR) or die $!;
close(INERR) or die $!;
unlink 'errfile.txt' or die $!;
rename('errfile.txt.back', 'errfile.txt') or die $!;



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Гость_mcx
Дата 26.6.2004, 19:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











можно использовать модуль CGI

Код

use CGI::Carp qw(set_message);
   BEGIN {
      sub handle_errors {
         my $msg = shift;
        #здесь деалешь что тебе нужно с строкой $msg
         exit;
     }
     set_message(\&handle_errors);
   }

  Вверх
korob2001
Дата 27.6.2004, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 6
Всего: 61



Большое спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.