Portál AbcLinuxu, 15. července 2025 05:02


Dotaz: Jak spustit v perlu program a poslat mu neco na STDIN?

13.12.2007 11:11 outsider
Jak spustit v perlu program a poslat mu neco na STDIN?
Přečteno: 380×
Odpovědět | Admin
Potreboval bych z perlu spustit externi program s tim, ze mu zaroven neco poslu na stdin a zpatky ve perl skriptu prectu to, co ten program vypise na stdout. Nevim jak na to. Chtel bych se vyhnout docasnym souborum.

Diky za kazdou inspiraci!

PS: $vystup = qx{echo $vstup|/usr/bin/muj_program} neni reseni, protoze za 1. se mi nechce premyslet o escapovani a za 2. se to blbe portuje na Win...
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.12.2007 12:13 mlz
Rozbalit Rozbalit vše Re: Jak spustit v perlu program a poslat mu neco na STDIN?
Odpovědět | | Sbalit | Link | Blokovat | Admin
open IN, "|/usr/bin/mujprogram"
open OUT, "/usr/bin/mujprogram|"
print IN $vstup
@output=<OUT>
ale unika mi PROC to takto chcete. Vice man/perldoc perlipc
13.12.2007 12:59 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak spustit v perlu program a poslat mu neco na STDIN?
netestované, píšem z hlavy
use Proc::Fork;
use IO::Pipe;

my $in = new IO::Pipe;
my $out = new IO::Pipe;

child {
  $in->reader; $out->writer;
  open STDIN, '<&=', $in;
  open STDOUT, '>&=', $out;

  exec;
} parent {
  $in->writer; $out->reader;
}
13.12.2007 18:05 hudin | skóre: 7
Rozbalit Rozbalit vše Re: Jak spustit v perlu program a poslat mu neco na STDIN?
Odpovědět | | Sbalit | Link | Blokovat | Admin
IPC::Open2

IPC::Open3
14.12.2007 07:07 pht
Rozbalit Rozbalit vše Re: Jak spustit v perlu program a poslat mu neco na STDIN?
Jojo, tohle je ta spravna cesta. Ale je potreba si precist celou dokumentaci - je tam nekolik "caveatu" - deadlocku v pripade ze cekam na vystup a vstup zaroven; radkove vs. blokove bufferovani; ukonceni potomka procesu aby z nej nebyl zombie. Jo a na windows to pouzivat v nejmensi mozne mire, nebot v pripade nejakych vetsich vylomenin se z toho po.
14.12.2007 08:26 outsider
Rozbalit Rozbalit vše Re: Jak spustit v perlu program a poslat mu neco na STDIN?
Diky za nasmerovani, snad se dostanu dneska k tomu, abych to i vyzkousel!
18.12.2007 10:01 outsider
Rozbalit Rozbalit vše Re: Jak spustit v perlu program a poslat mu neco na STDIN?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak open2() je spravna cesta (nepotrebuju stderr). Zda se ze to funguje, i kdyz na windonws jsem to jeste nestihl vyzkouset. Napred odladim na Linuxu a pak zkusim, co to dela na Win...

A kdyby to nekdo zkousel, tak dve kratke poznamky:

1. Bufferovany vystup... obcas se neco vytiskne dvakrat nebo ve spatnem poradi... :-) Takze $|=1

2. Dokud nezavru stdin filehandle (ten nove vytvoreny, samozrejme), tak volany podproces neskonci

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.