2014-02-01 2 views
0

Может ли кто-нибудь сказать мне, почему это не печатает ничего, кроме обычного выхода скрипта?Вывод команды Perl с использованием трубы

open(PS, "python /home/me/someprogram.py --option1 A -d somedomain.com |") || die "Failed: $!\n"; 
while (<PS>) { 
    my $line = $_; 
    print "LINE = $line\n"; 
} 

Другими словами, он никогда не печатает:

ЛИНИЯ = ...

Только регулярный выход, как если бы я был запущен непосредственно из командной строки.

Принимая во внимание следующие работы тонкодисперсных:

open(PS, "ps waux |") || die "Failed: $!\n"; 
while (<PS>) { 
    my $line = $_; 
    print "LINE = $line\n"; 
} 

EDIT (решаемые)

Это работает

open(PS, "python /home/me/someprogram.py --option1 A -d somedomain.com 2>&1 |") || die "Failed: $!\n"; 
while (<PS>) { 
    my $line = $_; 
    print "LINE = $line\n"; 
} 
+1

'питон .. 2> & 1' –

+0

Спасибо, что сделали это - открытая (PS, "питон /home/me/someprogram.py --option1 -d somedomain.com 2> & 1 |") – someuser

+1

@mpapec Вам интересно объяснить, почему объединение stderr с stdout заставляет его работать, пожалуйста? Благодарю. –

ответ

0

Как насчет этого?

open(PS, '-|','python /home/me/someprogram.py --option1 A -d somedomain.com') 
+0

Такая же проблема ... Никогда не доходит до 'Line =' ... – someuser

+0

Я обновил свой ответ ... –

+0

Пробовал это тоже, и это не сработало. Теперь решается (см. Выше), используя 2> & 1. – someuser

Смежные вопросы