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