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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запускать процессы через IPC? IPC процессы 
:(
    Опции темы
RainMan
Дата 26.5.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!

Подскажите пожалуйста как все таки правильно пользоваться IPC::Open2 ? Для всех ли приложений можно открыв процесс послыть комманды на выполнение?

Видел примеры выполнения скриптов через IPC которые пользуются простенькими программами - тут все ясно. А как быть с программами посложнее?


Код

use IPC::Open2 qw(open2);


    $SIG{PIPE} = sub { die "bc exited prematurely\n" };

    $pid = open2 READ, WRITE, 'bc';

    foreach $expression (qw(2+2 1^0 1/0)) {

        print WRITE "$expression\n"             or die $!;

        defined($result = <READ>)               or die $!;

        chomp $result;

        print "$expression = $result\n"         or die $!;

    }

    close WRITE                 or die $!;

    close READ                  or die $!;

    waitpid($pid, 0) == $pid    or die $!;

    $? == 0                     or die "return status $? from bc\n"; 



тут все понятно - есть программа "bc" на вход которой подставляют выражения..


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

у меня есть программа Nedit (текстовый редактор, вы в курсе я думаю). запускается как "nedit <file_name>"

Каким образом можно открыть этот текстовый редактор и через комманду Print напечатать в доккументе какое нибудь слово?

Такое возможно вообще? 


такой вот код не прокатывает.. открывается просто текстовый редактор, но в нем ничего не появляется..

Код

use IPC::Open2 qw(open2);


    $SIG{PIPE} = sub { die "bc exited prematurely\n" };

    $pid = open2 READ, WRITE, 'nedit';

    foreach $expression (qw("hello" "hello again")) {

        print WRITE "$expression\n"             or die $!;

        defined($result = <READ>)               or die $!;

        chomp $result;

        print "$expression = $result\n"         or die $!;

    }

    close WRITE                 or die $!;

    close READ                  or die $!;

    waitpid($pid, 0) == $pid    or die $!;

    $? == 0                     or die "return status $? from bc\n"; 




Спасибо. 
PM MAIL   Вверх
RainMan
Дата 27.5.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ни у кого нет никаких вариантов??? 
PM MAIL   Вверх
sharq
Дата 9.6.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



RainMan, попробуй открыть через pipe обычной командой open. 


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
RainMan
Дата 9.6.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Извиняюсь может за глупый вопрос но это как?  smile 
PM MAIL   Вверх
sharq
Дата 12.6.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



RainMan, почитай perldoc -f open и про pipe (трубы).

Не знаю, умеет ли nedit обрабатывать STDIN. 
Вот пример с использованием моей программы:
Код

#!perl

use strict;

open my $fh, '|-', 'perl test.pl' or die "Can't open file: $!";
print $fh "hello\n";
print $fh "i'm sharq!\nbye-bye\n\n";


А вот сама программа, которая обрабатывает STDIN - test.pl.
Код

#!perl

use strict;

while (<>) {
    chomp;
    print "test: $_\n";
}


Вот результат работы.
Цитата

C:\>perl example.pl
test: hello
test: i'm sharq!
test: bye-bye
test:


 smile  


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
RainMan
Дата 12.6.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



sharq, спасибо за совет... почитал про эти функции, правда про них я уже знаю, тока не в курсе был что это pipe зовется smile

Твой код работает отлично. Забудем про nedit пока, он явным образом не работает с stdin у меня есть другая прога которая с ним работает. Однако она грузится очень долго (из-за получения лицензий + много плагинов в себе имеет всяческих.. в общем секунд 30-40 она грузится). Как бы дождаться того момента когда все это хозяйство загрузится и программа будет готова реагировать на комманды? 

Спасибо за помощь. 
PM MAIL   Вверх
sharq
Дата 12.6.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



RainMan
Цитата(RainMan @  12.6.2006,  21:00 Найти цитируемый пост)
Однако она грузится очень долго (из-за получения лицензий + много плагинов в себе имеет всяческих.. в общем секунд 30-40 она грузится). Как бы дождаться того момента когда все это хозяйство загрузится и программа будет готова реагировать на комманды? 

подождать 30-40 секунд  smile 
Откуда я могу знать, о какой ты программе говоришь и как я тебе могу дать совет?

Что это за программа, которая так долго грузиться, даже ОС быстрей загружается. 

 smile  


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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