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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Win32 stderr не перехватывается 
:(
    Опции темы
shamber
Дата 11.7.2012, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



Здравствуйте!
Есть программа, исходные коды которой мне не доступны, которую мне нужно запустить с параметрами.
Все прекрасно запускается и отрабатывается, но в ходе работы программа пишет сообщения о результативности. 
Однако попытки получить эти сообщения из скрипта заканчиваются провалом. Т.е. В консоли сообщения появляются, а при запуске скрипта из перл, я не могу перехватить вывод. Перепробовал уже кучу модулей, однако никакого результата не получил. 
пример кода с которым не срабатывает
Код

use IPC::Open3 'open3';
my $ret=run_shell('bla.exe 1 1');
sub run_shell {
    my ($cmd) = @_;
    my @args = ();
    my ( $HIS_IN, $HIS_OUT, $HIS_ERR ) = ( $EMPTY, $EMPTY, $EMPTY );
    my $childpid = open3( $HIS_IN, $HIS_OUT, $HIS_ERR, $cmd, @args );
    $ret = print {$HIS_IN} "stuff\n";
    close $HIS_IN;    # Give end of file to kid.
    if ($HIS_OUT) {
        my @outlines = <$HIS_OUT>;    # Read till EOF.
        $ret = print " STDOUT:\n", @outlines, "\n";
    }
    if ($HIS_ERR) {
        my @errlines = <$HIS_ERR>;    # XXX: block potential if massive
        $ret = print " STDERR:\n", @errlines, "\n";
    }
    close $HIS_OUT;
    close $HIS_ERR;
    waitpid $childpid, 0;
    if ($CHILD_ERROR) {
        $ret = print "That child exited with wait status of $CHILD_ERROR\n";
    }
    return 1;
}

Как решить?
Может быть, как нибудь запустить из скрипта консоль в ней запустить скрипт и прочитать вывод из консоли, это возможно?
PM MAIL Jabber   Вверх
DurRandir
Дата 11.7.2012, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
 If CHLD_ERR is false, or the same file descriptor as CHLD_OUT, then STDOUT and STDERR of the child are on the same filehandle (this means that an autovivified lexical cannot be used for the STDERR filehandle, see SYNOPSIS).

PM   Вверх
shamber
Дата 12.7.2012, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



Я слегка не понял вашу мусль, но даже если я пишу 
Код

my $childpid = open3( $HIS_IN, $HIS_OUT, undef, $cmd, @args );

Это к сожалению, никак не меняет ситуацию, к лучшему. Инфа не появляется
PM MAIL Jabber   Вверх
Google
  Дата 21.5.2019, 04:45 (ссылка)  





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


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

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


 




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


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

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