[python] Jak udelat wait u popen.
Jan Martinek
honza na dp.fce.vutbr.cz
Středa Březen 21 13:14:06 CET 2007
> Pisu si scriptik kterej mi projde pomoci os.walk() zadany adresar se zalohama a vsechny soubory se starsim datem nez pulnoc posledni soboty mi prekopiruje na usb disky. Delam si tak offsite backup. A do dnes jsem to kopiroval manualne, coz je pruda. :)
Tak to zkus napsat v čistém pythonu. Bude to přenositelné, hodně se tím
naučíš, budeš mít pod kontrolou co se děje a troufám si říct, že to
poběží rychleji.
>
> Ve zkratce to jede zhruba takto:
>
> #Vymaz vse na usb disku:
> os.popen('rm -rfv /mnt/usb/*')
Typický příklad pro os.walk a parametrem topdown = False. Je potřeba
rozlišit adresáře (které se mažou funkcí os.rmdir) a soubory + linky (ty
se mažou os.remove).
>
> #prekopiruj files
> For f in files:
> os.popen('cp -v f /mnt/usb/')
> os.popen('rm -v f')
>
Takže nejprve kopíruješ a pak mažeš? To lze nahradit jedinou funkcí
os.rename().
> Samozrejme je kolem toho jeste spousta omacky ale tohle je kostra. A prave potrebuji nejak cekat nez se mazani a kopirovani dokonci.
Aha, takže ani nepotřebuješ číst z roury, je to tak?
import subprocess
cmd = subprocess.Popen(['sleep', '5'])
cmd.wait()
> Mozna by to slo nejak resit pomoci copyfile z shutil, nevim.
>
>
Jojo, tam jsou docela užitečné věci.
Jan Martinek
Další informace o konferenci Python