[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