python - os.popen()

Jan Vyplašil vyplasil na ycnega.cz
Středa Červen 11 08:42:43 CEST 2003




> > Dne út 10. června 2003 09:42 jste napsal(a):
> >> Zdravím,
> >> když napíšu:
> >> .....
> >> neco=os.popen(neco1)
> >> neco2=neco.read()
> >> print neco2
> >> .....
> >> tak se příkaz (neco1) provede a výsledek napíše. Ale já bych
potřeboval,
> >> aby se vypisoval příkaz postupně - ne až konečný celkový výpis. Vím, že
> >> bych měl použít cyklus, ale co použít místo read() ?? Díky za názory,
> >
> > nevim presne, co chcete, ale
> > for i in os.popen(blah).read():
> > print i
> >
> > to po znacich vypise.
> >
> > jinak doporucuji konferenci o pythonu na
> > http://www.py.cz
> >
> > No, myslel jsem trochu něco jinýho. Abych byl konrétní, jde o příkaz
ping.
> > Jenomže popen počká, až se ping provede tolikrát, kolikrát jsem zadal a
> > vypíše to pak celkově. Jde mi o to, aby se vypisoval ping pro jednotlivý
> > odeslaný pakety - jako když jej píšu z příkazovýho řádku.
> > Abych zkrátka nečekal několik minut, když vyšlu 100x pingnout než to
něco
> > napíše, ale abych byl hned v obraze :-)
>
> No za prve naucte svuj MUA, aby nejak prefixoval puvodni email, aby se
dalo
> poznat to co pisete vy a co psal predchozi pisatel.
>
> Za druhe bych rekl, ze spis chcete neco jako
>
>     pi = os.pipe()
>     pid = os.fork();
>
>     if pid == -1:
>         os.close(pi[0])
>         os.close(pi[1])
>     elif pid == 0:
>         os.close(pi[0])
>         os.close(1)
>         os.close(2)
>         os.dup2(pi[1],1)
>         os.dup2(pi[1],2)
>         os.close(pi[1])
>         os.execv("/bin/ping", ['/bin/ping,'127.0.0.1'])
>         _exit(111)
>
>     os.close(pi[1])
>     ### tuhle cast si upravte dle svych potreb ###
>     ### napriklad, kdy se chcete zastavit atp. ###
>     readbytes = os.read(pi[0], 32)
>     os.close(pi[0])
>     os.wait()
>


Hmm, jenomže toto je bohužel možná jen v systémech UNIX. Potřebuju to
rozběhat pod win (activePython2.2). Ale to jsem asi na nesprávné konferenci.
Stejně díky za podněty a návrhy.
Honza




Další informace o konferenci Linux