Forum » Programiranje » komunikacija med konzolnimi programi
komunikacija med konzolnimi programi
mojca ::
Rada bi napisala skripto (najverjetneje v ruby-u ali perl-u), ki naj bi klicala nek konzolni program, s katerim bi se morala znati skripta pogovarjati. Rada bi torej v program vpisovala ukaze, brala rezultate, ki mi jih program vraca, in rezultatom primerno "sprasevala" dalje.
Butast primer za ponazoritev: moja skripta vprasa uporabnika za njegovo srecno stevilko (N), in ker sama ne zna racunati, klice kalkulator (recimo bc), ga vprasa za ostanek srecnega stevila pri deljenju s 13 (N%13); ce je odgovor 0, "bc" vprasa se za fakulteto stevila N (N!) in izpise slednjo na zaslon, sicer pa uporabniku vrne niz "oprosti, nisi rojen pod srecno zvezdo".
Obstajati mora trivialna resitev, ukaz ali dva, ampak jaz jih ne vem. Kaksen predlog? Hvala, Mojca
PS: to je psevdokoda zgornjega butastega opisa:
Butast primer za ponazoritev: moja skripta vprasa uporabnika za njegovo srecno stevilko (N), in ker sama ne zna racunati, klice kalkulator (recimo bc), ga vprasa za ostanek srecnega stevila pri deljenju s 13 (N%13); ce je odgovor 0, "bc" vprasa se za fakulteto stevila N (N!) in izpise slednjo na zaslon, sicer pa uporabniku vrne niz "oprosti, nisi rojen pod srecno zvezdo".
Obstajati mora trivialna resitev, ukaz ali dva, ampak jaz jih ne vem. Kaksen predlog? Hvala, Mojca
PS: to je psevdokoda zgornjega butastega opisa:
N = stdin.readinteger()
f = execute_program("bc")
f.writetoprogram("N%13")
temp = f.readresult()
if (temp == 0) {
f.writetoprogram("N!")
stdout.write(f.readresult)
} else {
stdout.write("oprosti, nisi rojen pod srecno zvezdo")
}
Senitel ::
To narediš s pipe-i... Zdej v Pythonu je recimo en ukaz "popen", ki ti požene en konzolni proces in se prilepi na njegovo konzolo popen pa vrne stdin, stdout iz katerih potem ti pišeš in bereš. Poišči nekaj podobnega še v PHP-ju.
64202 ::
popen ni dovolj glede na psevdokodo, zahteva je po dvosmerni komunikaciji. Ta tehnika je znana pod imenom coprocess, tole je pa koda za perl:
Bidirectional Communication with Another Process
Bidirectional Communication with Another Process
I am NaN, I am a free man!
mojca ::
Najlepša hvala za link na CPAN-u in za splošen uvod v pajpanje na Borlandovi strani, ampak glede perla me malo skrbi tale komentar: The open2() and open3() functions are unlikely to work anywhere except on a Unix system or some other one purporting to be POSIX compliant.
Nesprejemljivo je, da program ne bi delal na windowsih.
V ruby-u sem poskušala naslednje:
Če odprem samo z "w", vrne napako pri zadnjem stavku, ko hočem izpisati rezultat (program je odprt samo za pisanje, ne pa tudi za branje). Če "puts pipe.gets" zakomentiram, dela, ampak ne ustreza mojim zahtevam. "w+" ne dela. Kako delajo ostali programerji???
Še enkrat hvala za pomoč in nasvete,
Mojca
Nesprejemljivo je, da program ne bi delal na windowsih.
V ruby-u sem poskušala naslednje:
IO.popen("bc","w") {|pipe| # oz. "w+" namesto "w"
pipe.puts("3+5")
puts pipe.gets
}
Če odprem samo z "w", vrne napako pri zadnjem stavku, ko hočem izpisati rezultat (program je odprt samo za pisanje, ne pa tudi za branje). Če "puts pipe.gets" zakomentiram, dela, ampak ne ustreza mojim zahtevam. "w+" ne dela. Kako delajo ostali programerji???
Še enkrat hvala za pomoč in nasvete,
Mojca
dr. Zgemba ::
S socketpairom bi moralo iti gladko tudi na WIN.
Poglej si perlipc in perlfunc manpage.
Pa celo poglavje v Camelbook je na to temo, vključno s primeri.
Poglej si perlipc in perlfunc manpage.
Pa celo poglavje v Camelbook je na to temo, vključno s primeri.
bugz116 ::
> Nesprejemljivo je, da program ne bi delal na windowsih.
Perlov open2 dela tudi na winsih.
Perlov open2 dela tudi na winsih.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Katero grafično kartico: 7870 vs 650 tiOddelek: Kaj kupiti | 2926 (2512) | Xserces |
» | template skripta - PERLOddelek: Programiranje | 1161 (936) | ABX |
» | [Python, Linux] Poganjanje skripte s crontabOddelek: Programiranje | 1466 (1289) | morbo |
» | [ C++ ] Več programov naenkratOddelek: Programiranje | 959 (854) | OwcA |
» | LCD dražu oči?Oddelek: Pomoč in nasveti | 2218 (1414) | Azrael |