python - os.popen()
Ondrej Sury
sury.ondrej na globe.cz
Úterý Červen 10 10:58:54 CEST 2003
Jan Vyplašil <vyplasil na ycnega.cz> writes:
> 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()
--
Ondrej Sury - co/CTO Globe Internet s.r.o. http://globe.cz/
Tel: +420(2)35365000 Fax: +420(2)35365009 Planickova 1, 162 00 Praha 6
Další informace o konferenci Linux