Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ Π² Python: ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ VPS ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ
ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ β ΡΡΠΎ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π²ΡΠΊ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°. ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡΠΈΡΠ°Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Python ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠΎΡΠ½ΡΠ΅ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Python Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² β os, shutil ΠΈ pathlib β Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ Linux-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ Python-ΡΠΊΡΠΈΠΏΡΡ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ VPS Hosting, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΡΡΠ½ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
ΠΠΎΡΠ΅ΠΌΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Python Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
ΠΠ° ΠΆΠΈΠ²ΠΎΠΌ Linux ΡΠ΅ΡΠ²Π΅ΡΠ΅ β ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ CMS, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ WordPress, ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ β Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π»ΠΎΠ³ΠΈ ΠΈ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΡ ΡΠ΅Π½Π½ΠΎΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. Python ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡ ΠΎΡΠΈΡΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΠ΅Π΅, ΡΠ΅ΠΌ ΡΡΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ shell, ΠΈ ΠΎΠ½ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΡΡΡΡ Π² cron Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΡΠΈ Π·ΡΠ΅Π»ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ:
| ΠΠΎΠ΄ΡΠ»Ρ | ΠΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ | ΠΠ΅ΡΡΠΈΡ Python |
|---|---|---|
os | ΠΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΠ‘, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ | ΠΡΠ΅ Π²Π΅ΡΡΠΈΠΈ |
shutil | ΠΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ | ΠΡΠ΅ Π²Π΅ΡΡΠΈΠΈ |
pathlib | ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΡΡΠΌΠΈ, ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΡΠ΅ Π±Π°Π·Ρ | Python 3.4+ |
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
1. ΠΠΎΠ΄ΡΠ»Ρ os
ΠΠΎΠ΄ΡΠ»Ρ os ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΡΠΌΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ². ΠΠ° Linux VPS ΠΎΠ½ Π΄Π°Π΅Ρ Π²Π°ΠΌ ΡΠΎΡΠ½ΡΠΉ, Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ:
os.remove(path)β Π£Π΄Π°Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΏΡΡΠΈ. ΠΡΠ·ΡΠ²Π°Π΅ΡFileNotFoundError, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.os.unlink(path)β Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π°os.remove(). ΠΠ°Π·Π²Π°Π½ΠΈΠ΅unlinkΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² POSIX, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π°Π»ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ°ΠΉΠ»Π°.os.rmdir(path)β Π£Π΄Π°Π»ΡΠ΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³. ΠΠ°ΡΠ°Π»ΠΎΠ³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡOSError.
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ os, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΎΡΠ½ΡΠΉ, Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡΡΡΡΠΌΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ POSIX.
2. ΠΠΎΠ΄ΡΠ»Ρ shutil
ΠΠΎΠ΄ΡΠ»Ρ shutil (ΡΡΠΈΠ»ΠΈΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²ΡΠ±ΠΎΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ΅Π»ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΈ ΡΠ°ΠΉΠ»Ρ.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ:
shutil.rmtree(path)β Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΈ Π²ΡΠ΅ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅. ΠΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Python Π΄Π»Ρrm -rfΠ² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅.shutil.move(src, dst)β ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ. Π₯ΠΎΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Ρ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π² ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ ΠΎΡΠΈΡΡΠΊΠΈ.
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ shutil, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ.
3. ΠΠΎΠ΄ΡΠ»Ρ pathlib
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² Python 3.4, pathlib ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΡΡΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΡΡΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Path, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ:
Path.unlink()β Π£Π΄Π°Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ». ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡmissing_ok=True(Python 3.8+) Π΄Π»Ρ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡFileNotFoundError.Path.rmdir()β Π£Π΄Π°Π»ΡΠ΅Ρ ΠΏΡΡΡΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³.- ΠΠ»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ
pathlibΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠ΅ΡΡΡ Ρshutil.rmtree().
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ pathlib Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ²ΡΡ
Π±Π°Π·Π°Ρ
Python 3, Π³Π΄Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π²Π°ΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π½ΠΈΠΆΠ΅ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Python 3 ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΠ° VPS Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Debian/Ubuntu Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
python3 --versionΠΡΠ»ΠΈ Python 3 Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½:
sudo apt update && sudo apt install python3 -yΠ£ Π²Π°Ρ Π΅ΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Python:
ΠΠ°ΡΠΈΠ°Π½Ρ A: ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ΅Π°Π½Ρ Python
python3ΠΡΡΠ°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ. ΠΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π±ΡΡΡΡΡΡ ΡΠ΅ΡΡΠΎΠ².
ΠΠ°ΡΠΈΠ°Π½Ρ B: ΡΠ°ΠΉΠ» ΡΠΊΡΠΈΠΏΡΠ° Python
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°:
nano my_script.pyΠΡΡΠ°Π²ΡΡΠ΅ Π²Π°Ρ ΠΊΠΎΠ΄, ΡΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ Ρ Ctrl+O, Π²ΡΠΉΠ΄ΠΈΡΠ΅ Ρ Ctrl+X, Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΠ΅:
python3 my_script.pyΠΠ»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π²Π°ΡΠΈΠ°Π½Ρ B Π²ΡΠ΅Π³Π΄Π° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ β ΡΠΊΡΠΈΠΏΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΠΈ, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π· cron ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²: ΠΏΠΎΠ»Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ

ΠΡΠΈΠΌΠ΅Ρ 1: ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ os.remove()
Π¨Π°Π³ 1: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ.
touch example.txtΠ¨Π°Π³ 2: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ Python.
nano remove_file.pyΠ¨Π°Π³ 3: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
import os
file_path = 'example.txt'
try:
os.remove(file_path)
print(f'Successfully deleted: {file_path}')
except FileNotFoundError:
print(f'Error: The file "{file_path}" does not exist.')
except PermissionError:
print(f'Error: Permission denied β unable to delete "{file_path}".')
except Exception as e:
print(f'An unexpected error occurred: {e}')Π¨Π°Π³ 4: Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ.
python3 remove_file.pyΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Successfully deleted: example.txtΠ§ΡΠΎ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ: os.remove() ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ»ΠΎΠΊ try/except Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ ΡΠ±ΠΎΠΉ ΡΠΊΡΠΈΠΏΡΠ°.

ΠΡΠΈΠΌΠ΅Ρ 2: ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Ρ os.rmdir()
Π¨Π°Π³ 1: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΡΡΠΎΠΉ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³.
mkdir example_dirΠ¨Π°Π³ 2: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ Python.
nano remove_directory.pyΠ¨Π°Π³ 3: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
import os
directory_path = 'example_dir'
try:
os.rmdir(directory_path)
print(f'Successfully deleted directory: {directory_path}')
except FileNotFoundError:
print(f'Error: The directory "{directory_path}" does not exist.')
except OSError:
print(f'Error: The directory "{directory_path}" is not empty or cannot be removed.')
except Exception as e:
print(f'An unexpected error occurred: {e}')Π¨Π°Π³ 4: Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ.
python3 remove_directory.pyΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Successfully deleted directory: example_dir> ΠΠ°ΠΆΠ½ΠΎ: os.rmdir() Π²ΡΠ·ΠΎΠ²Π΅Ρ OSError, Π΅ΡΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ. ΠΠ»Ρ Π½Π΅ΠΏΡΡΡΡΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ shutil.rmtree() (ΡΠΌ. ΠΏΡΠΈΠΌΠ΅Ρ 3).

ΠΡΠΈΠΌΠ΅Ρ 3: ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Ρ shutil.rmtree()
ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° β ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π·Π° ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
Π¨Π°Π³ 1: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π²Π½ΡΡΡΠΈ.
mkdir -p example_dir_with_content
touch example_dir_with_content/file1.txt
touch example_dir_with_content/file2.txt
mkdir example_dir_with_content/subdir
touch example_dir_with_content/subdir/file3.txtΠ¨Π°Π³ 2: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ Python.
nano remove_directory_content.pyΠ¨Π°Π³ 3: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
import shutil
directory_path = 'example_dir_with_content'
try:
shutil.rmtree(directory_path)
print(f'Successfully deleted directory and all contents: {directory_path}')
except FileNotFoundError:
print(f'Error: The directory "{directory_path}" does not exist.')
except PermissionError:
print(f'Error: Permission denied β unable to delete "{directory_path}".')
except Exception as e:
print(f'An unexpected error occurred: {e}')Π¨Π°Π³ 4: Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ.
python3 remove_directory_content.pyΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Successfully deleted directory and all contents: example_dir_with_content> ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: shutil.rmtree() Π½Π΅ΠΎΠ±ΡΠ°ΡΠΈΠΌΠΎ. ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² production-ΡΠΊΡΠΈΠΏΡΠ°Ρ
. Π Π°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° dry-run Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.


ΠΡΠΈΠΌΠ΅Ρ 4: ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Ρ pathlib
ΠΠΎΠ΄ΡΠ»Ρ pathlib ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΈΡΡΡΡ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ os.remove().
Π¨Π°Π³ 1: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ».
touch example.txtΠ¨Π°Π³ 2: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ Python.
nano pathlib_remove_file.pyΠ¨Π°Π³ 3: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
from pathlib import Path
file_path = Path('example.txt')
try:
file_path.unlink()
print(f'Successfully deleted: {file_path}')
except FileNotFoundError:
print(f'Error: The file "{file_path}" does not exist.')
except PermissionError:
print(f'Error: Permission denied β unable to delete "{file_path}".')
except Exception as e:
print(f'An unexpected error occurred: {e}')Π¨Π°Π³ 4: Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ.
python3 pathlib_remove_file.pyΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Successfully deleted: example.txtΠ‘ΠΎΠ²Π΅Ρ Π΄Π»Ρ Python 3.8+: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ file_path.unlink(missing_ok=True) Π΄Π»Ρ ΠΌΠΎΠ»ΡΠ°Π»ΠΈΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ° ΡΠ΄Π°Π»Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΈΡΠΊΠ»ΡΡΠΈΠ² Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ FileNotFoundError Π² Π½Π΅ΠΊΡΠΈΡΠΈΡΠ½ΡΡ
ΡΠΊΡΠΈΠΏΡΠ°Ρ
.
ΠΡΠΈΠΌΠ΅Ρ 5: ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Ρ pathlib
nano pathlib_remove_dir.pyfrom pathlib import Path
directory_path = Path('example_dir')
try:
directory_path.rmdir()
print(f'Successfully deleted directory: {directory_path}')
except FileNotFoundError:
print(f'Error: The directory "{directory_path}" does not exist.')
except OSError:
print(f'Error: The directory "{directory_path}" is not empty.')
except Exception as e:
print(f'An unexpected error occurred: {e}')python3 pathlib_remove_dir.pyΠΡΠΈΠΌΠ΅Ρ 6: ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ pathlib ΠΈ shutil Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ
ΠΠ»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ pathlib:
import shutil
from pathlib import Path
directory_path = Path('example_dir_with_content')
try:
shutil.rmtree(directory_path)
print(f'Successfully deleted: {directory_path}')
except FileNotFoundError:
print(f'Error: The directory "{directory_path}" does not exist.')
except PermissionError:
print(f'Error: Permission denied β unable to delete "{directory_path}".')
except Exception as e:
print(f'An unexpected error occurred: {e}')shutil.rmtree() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΏΡΡΠΈ, ΡΠ°ΠΊ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Path, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠΈΡΡΠΎΠΉ ΠΈ ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΠΉ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Python.
Graceful Error Handling: Best Practices
ΠΠ°Π΄Π΅ΠΆΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π² production-ΡΠΊΡΠΈΠΏΡΠ°Ρ β ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΠΎΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²:
| Exception | Cause | Recommended Response |
|---|---|---|
FileNotFoundError | Π¦Π΅Π»Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ | ΠΠΎΠ³ΠΈΡΡΠΉΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅; ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ ΠΌΠΎΠ»ΡΠ°, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ |
PermissionError | ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° | ΠΠΎΠ³ΠΈΡΡΠΉΡΠ΅ ΠΈ ΠΎΡΠΏΡΠ°Π²ΡΡΠ΅ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅; ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ |
OSError | ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π΅ ΠΏΡΡΡΠ° (Π΄Π»Ρ rmdir), ΠΈΠ»ΠΈ Π΄ΡΡΠ³Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΡΡΠΎΠ²Π½Ρ ΠΠ‘ | ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ shutil.rmtree() Π΄Π»Ρ Π½Π΅ΠΏΡΡΡΡΡ
Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ; ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ |
IsADirectoryError | os.remove() Π²ΡΠ·Π²Π°Π½ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ | ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° os.rmdir() ΠΈΠ»ΠΈ shutil.rmtree() |
NotADirectoryError | os.rmdir() Π²ΡΠ·Π²Π°Π½ Π½Π° ΡΠ°ΠΉΠ»Π΅ | ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° os.remove() |
Production-Ready Deletion Function
ΠΠΎΡ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΡΠ»ΡΠΆΠ΅Π±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ ΡΠ°ΠΉΠ»Ρ, ΡΠ°ΠΊ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
import os
import shutil
from pathlib import Path
def safe_delete(target: str, recursive: bool = False) -> bool:
"""
Safely deletes a file or directory.
Args:
target: Path to the file or directory to delete.
recursive: If True, recursively delete directory contents.
Returns:
True if deletion was successful, False otherwise.
"""
path = Path(target)
try:
if path.is_file() or path.is_symlink():
path.unlink()
print(f'[OK] Deleted file: {path}')
elif path.is_dir():
if recursive:
shutil.rmtree(path)
print(f'[OK] Deleted directory (recursive): {path}')
else:
path.rmdir()
print(f'[OK] Deleted empty directory: {path}')
else:
print(f'[SKIP] Target does not exist: {path}')
return False
return True
except PermissionError:
print(f'[ERROR] Permission denied: {path}')
except OSError as e:
print(f'[ERROR] OS error for "{path}": {e}')
except Exception as e:
print(f'[ERROR] Unexpected error for "{path}": {e}')
return False
# Usage examples
safe_delete('example.txt')
safe_delete('empty_dir')
safe_delete('full_dir', recursive=True)ΠΡΠΎΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π΄Π»Ρ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, ΡΡΠΈΠ»ΠΈΡ ΡΠΎΡΠ°ΡΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΎΡΠΈΡΡΠΊΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ VPS Hosting.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π° Linux VPS
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Python ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅Π½Π½ΡΠΌ Π² ΡΡΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°:
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΡΡΠΊΠ° Π»ΠΎΠ³ΠΎΠ²
ΠΠ΅Π±-ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ Π»ΠΎΠ³ΠΎΠ². Π‘ΠΊΡΠΈΠΏΡ Python, Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΡΠ΅Π· cron, ΠΌΠΎΠΆΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΡΡΡ Π»ΠΎΠ³ΠΈ ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Ρ ΡΠ°Π½Π΅Π½ΠΈΡ:
import os
from pathlib import Path
from datetime import datetime, timedelta
log_dir = Path('/var/log/myapp')
retention_days = 30
cutoff = datetime.now() - timedelta(days=retention_days)
for log_file in log_dir.glob('*.log'):
file_mtime = datetime.fromtimestamp(log_file.stat().st_mtime)
if file_mtime < cutoff:
log_file.unlink()
print(f'Deleted old log: {log_file}')ΠΡΠΈΡΡΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΡΠ°ΡΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΠΉ. Π‘ΠΊΡΠΈΠΏΡΡ Python, ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ CI/CD, Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΎΡΡΠ΅ΡΠΎΠ², ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² β Π²ΡΠΈΠ³ΡΡΠ²Π°ΡΡ ΠΎΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΎΡΠΈΡΡΠΊΠΈ Python, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°ΡΡ ΠΈΡΡΠ΅ΡΠΏΠ°Π½ΠΈΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°.
ΠΡΠ»ΠΈ Π²Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π΄ΠΎΠΌΠ΅Π½Π°Ρ , ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Dedicated Servers ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ root-Π΄ΠΎΡΡΡΠΏ ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅Π· ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ Π·Π° ΡΠ΅ΡΡΡΡΡ.
ΠΡΠ±ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ: ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ
Need to delete a single file?
βββ Modern codebase (Python 3.4+)? β pathlib Path.unlink()
βββ Legacy or compatibility-focused? β os.remove()
Need to delete a directory?
βββ Directory is empty?
β βββ Modern codebase? β pathlib Path.rmdir()
β βββ Legacy? β os.rmdir()
βββ Directory has contents?
βββ Always β shutil.rmtree()Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ΅Π΄
ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎΠ± ΡΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ:
- ΠΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΠΏΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ· Π½Π΅ΠΎΡΠΈΡΠ΅Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ΅Π³Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠ°ΠΉΡΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΠΏΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
Path.resolve()Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ Π°ΡΠ°ΠΊ ΠΎΠ±Ρ ΠΎΠ΄Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ.
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΠ±Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°. ΠΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π΅ΡΡΡΡΠΊΡΠΈΠ²Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π°Π³
--dry-run, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΎ, Π±Π΅Π· ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΌΠΈ. ΠΠ°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ root, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
- ΠΠΎΠ³ΠΈΡΡΠΉΡΠ΅ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ. ΠΠ΅Π΄ΠΈΡΠ΅ ΠΆΡΡΠ½Π°Π» Π°ΡΠ΄ΠΈΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ, ΡΠ΅Π»Π΅Π²ΡΠΌΠΈ ΠΏΡΡΡΠΌΠΈ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
- Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΠΊΡΠΈΠΏΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π°Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ. Π‘ΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌΠΈ SSL Certificates ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠΌΠΈ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΡΠΈΡΠ°Π΅Ρ Π²Π°ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π² ΡΠ΅Π»ΠΎΠΌ.
Π₯ΠΎΡΡΠΈΠ½Π³ Python ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Python, Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ , ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, Π²Π°ΡΠ° ΡΡΠ΅Π΄Π° Ρ ΠΎΡΡΠΈΠ½Π³Π° ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
- VPS Hosting β ΠΠ΄Π΅Π°Π»Π΅Π½ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Python, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ root, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Python ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΠ½ΠΎΠ²ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ cron Π·Π°Π΄Π°Π½ΠΈΠΉ. VPS ΠΏΠ»Π°Π½Ρ AlexHost ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° SSD Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π»Ρ Π±ΡΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°.
- Dedicated Servers β ΠΡΡΡΠΈΠΉ Π²ΡΠ±ΠΎΡ Π΄Π»Ρ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅Π΄ΠΈΠ°, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΊΡΡΠΏΠ½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΡΠ΅ Π²Π΅Π±-ΡΠΊΡΠ΅ΠΏΠ΅ΡΡ.
- Shared Web Hosting β ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Python, Π³Π΄Π΅ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ β ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΠ½ΠΎΡΡΡ.
- GPU Hosting β Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π° Python ΠΈ ΡΠ°Π±ΠΎΡΠΈΡ Π½Π°Π³ΡΡΠ·ΠΎΠΊ AI, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ , ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΡΡΠΊΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ.
Π Π΅Π·ΡΠΌΠ΅
ΠΠΎΠ΄ΡΠ»ΠΈ os, shutil ΠΈ pathlib Python Π²ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π² Π»ΡΠ±ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΠΎΡ ΠΊΡΠ°ΡΠΊΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΠ°:
| ΠΠ°Π΄Π°ΡΠ° | Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ |
|---|---|
| Π£Π΄Π°Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» | pathlib.Path.unlink() ΠΈΠ»ΠΈ os.remove() |
| Π£Π΄Π°Π»ΠΈΡΡ ΠΏΡΡΡΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ | pathlib.Path.rmdir() ΠΈΠ»ΠΈ os.rmdir() |
| Π£Π΄Π°Π»ΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ | shutil.rmtree() |
| Π£Π΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ | pathlib.Path.glob() + Path.unlink() |
| ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ | ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΈΠ»ΠΈΡΡ (ΡΠΌ. ΠΡΠΈΠΌΠ΅Ρ 6) |
ΠΠ²Π»Π°Π΄Π΅Π² ΡΡΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ:
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° production-ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Π±Π΅Π· ΡΡΡΠ½ΠΎΠ³ΠΎ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π°
- ΠΠΈΡΠ°ΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π³ΡΠ°Π½ΠΈΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ Π±Π΅Π· ΡΠ±ΠΎΠ΅Π²
- ΠΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, Π·Π°Π΄Π°Π½ΠΈΡ cron ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΡΠΈΡΡΠΎΡΠ΅ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ, ΡΠ»ΡΡΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ½ΠΈΠΆΠ°Ρ Π·Π°ΡΡΠ°ΡΡ Π½Π° Ρ ΠΎΡΡΠΈΠ½Π³
Π£ΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° VPS Ρ cPanel ΠΈΠ»ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Python Π΄Π°ΡΡ Π²Π°ΠΌ ΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ