ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π² Python: ΠΡΠ»Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° VPS ΡΡΠ΅Π΄ΠΈ
ΠΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΡΠΌΠ΅Π½ΠΈΠ΅ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ. ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ production ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΈΡΡΠ²Π°ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°, Python ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΌΠΎΡΠ½ΠΈ, Π³ΡΠ²ΠΊΠ°Π²ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. Π’ΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π²ΡΠ΅ΠΎΠ±Ρ
Π²Π°ΡΠ½ΠΎ, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π½Π° ΡΡΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»Π° Π½Π° Python Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ β os, shutil ΠΈ pathlib β Ρ Π½Π°Π΄Π΅ΠΆΠ΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΡ ΡΠ΅Π°Π»Π½ΠΈΡ ΡΠ²ΡΡ, ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±Π΅Π½ΠΈ Π·Π° Linux ΡΡΡΠ²ΡΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
ΠΠΊΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Python ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π² VPS Hosting ΡΡΠ΅Π΄Π°, ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π½Π°ΠΌΠ°Π»ΠΈΡΠ΅ ΡΡΡΠ½ΠΈΡΠ΅ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ°.
ΠΠ°ΡΠΎ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² Python Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΡΠ²ΡΡΠΈ
ΠΠ° ΠΆΠΈΠ²ΠΎ Linux ΡΡΡΠ²ΡΡ β ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π΅Π΄ΠΈΠ½, ΠΊΠΎΠΉΡΠΎ Ρ ΠΎΡΡΠ²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, CMS ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ ΠΊΠ°ΡΠΎ WordPress, ΠΈΠ»ΠΈ data pipelines β Π½Π°ΡΡΡΠΏΠ°Π½ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ ΡΠΈΡΠ°ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π½Π°ΠΌΠ°Π»ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΈ Π΄Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Ρ ΡΠ΅Π½Π½ΠΎ Π΄ΠΈΡΠΊΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. Python ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Ρ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ° Π΄Π°Π»Π΅Ρ ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΠΈ ΠΎΡ ΡΡΡΠ½ΠΈΡΠ΅ shell ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΈ ΡΠ΅ ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Ρ Π±Π΅Π·ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ Π² cron jobs, deployment pipelines ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° Python ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΡΠΈ Π·ΡΠ΅Π»ΠΈ ΠΌΠΎΠ΄ΡΠ»Π° Π·Π° ΡΠ°Π·ΠΈ ΡΠ΅Π»:
| ΠΠΎΠ΄ΡΠ» | ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΡ ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° | ΠΠ΅ΡΡΠΈΡ Π½Π° Python |
|---|---|---|
os | ΠΠΈΡΠΊΠΎΡΠ°Π²Π½ΠΈ 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 (shell utilities) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΈΡΡ ΠΈΠ·Π±ΠΎΡ ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΡΠΈΠ΅ΡΠ΅ ΡΠ΅Π»ΠΈ Π΄ΡΡΠ²Π΅ΡΠ° Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
ΠΠ»ΡΡΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅:
shutil.rmtree(path)β Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΡΡΠΈΠ²Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ ΡΠ΅Π»ΠΈΡ ΠΉ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π΅ Python Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡΡ Π½Π°rm -rfΠ² shell.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 Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π½Π° Π²Π°ΡΠΈΡ ΡΠ΅ΡΠ²ΡΡ. ΠΠ° Debian/Ubuntu-Π±Π°Π·ΠΈΡΠ°Π½ Linux VPS, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΡΠΎΠ²Π° Ρ:
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() Π΅ Π½Π΅ΠΎΠ±ΡΠ°ΡΠΈΠΌΠΎ. ΠΠΈΠ½Π°Π³ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΈΡ ΠΏΡΡ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅. ΠΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΠ΄ΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΡΡ
ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ.


ΠΡΠΈΠΌΠ΅Ρ 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.txtPython 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
Robust error handling is not optional in production scripts β it is essential. Here is a summary of the most common exceptions you will encounter during file deletion operations:
| Exception | Cause | Recommended Response |
|---|---|---|
FileNotFoundError | Target file or directory does not exist | Log the error and continue; skip silently if expected |
PermissionError | Insufficient privileges to delete the target | Log and alert; check file ownership and permissions |
OSError | Directory is not empty (for rmdir), or other OS-level error | Use shutil.rmtree() for non-empty dirs; inspect error details |
IsADirectoryError | os.remove() called on a directory | Switch to os.rmdir() or shutil.rmtree() |
NotADirectoryError | os.rmdir() called on a file | Switch to os.remove() |
Production-Ready Deletion Function
Here is a reusable utility function that handles both files and directories safely:
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)This pattern is ideal for deployment scripts, log rotation utilities, and automated cleanup jobs running on a VPS Hosting environment.
ΠΡΠ°ΠΊΡΠΈΡΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° 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 Π·Π°Π΄Π°ΡΠΈ. AlexHost VPS ΠΏΠ»Π°Π½ΠΎΠ²Π΅ ΡΠ°Π±ΠΎΡΡΡ Π½Π° SSD Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π° Π±ΡΡΠ·ΠΈ I/O ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Dedicated Servers β ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠΊΠ»ΠΈΠ²ΠΎΡΡ, ΠΊΠΎΠΈΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ°ΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΌΠ΅Π΄ΠΈΠΈ, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠ°Π±Π½ΠΈ ΡΠ΅Π± ΡΠΊΡΠ΅ΠΉΠΏΠ΅ΡΠΈ.
- Shared Web Hosting β ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ Python ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΡΠ»Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΡΡΠ²ΡΡΠ° Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ ΠΈΠΊΠΎΠ½ΠΎΠΌΠΈΡΠ΅ΡΠΊΠ°ΡΠ° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ.
- GPU Hosting β Π‘ΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ Π·Π° Python-Π±Π°Π·ΠΈΡΠ°Π½ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ AI ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ.
Π Π΅Π·ΡΠΌΠ΅
Python's os, shutil ΠΈ pathlib ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΏΡΠ»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π² Π²ΡΡΠΊΠ° ΡΡΠ΅Π΄Π°. ΠΡΠΎ Π±ΡΡΠ· ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ:
| ΠΠ°Π΄Π°ΡΠ° | ΠΡΠ΅ΠΏΠΎΡΡΡΠ°Π½ ΠΌΠ΅ΡΠΎΠ΄ |
|---|---|
| ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ» | pathlib.Path.unlink() ΠΈΠ»ΠΈ os.remove() |
| ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ°Π·Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ | pathlib.Path.rmdir() ΠΈΠ»ΠΈ os.rmdir() |
| ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΡΡ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ | shutil.rmtree() |
| ΠΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½ | pathlib.Path.glob() + Path.unlink() |
| ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ | ΠΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΏΠΎΠΌΠΎΡΠ½ΠΎΡΡ (Π²ΠΈΠΆΡΠ΅ ΠΡΠΈΠΌΠ΅Ρ 6) |
Π§ΡΠ΅Π· ΠΎΠ²Π»Π°Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π΄Π°:
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° production ΡΡΡΠ²ΡΡΠΈ Π±Π΅Π· ΡΡΡΠ½Π° Π½Π°ΠΌΠ΅ΡΠ°
- ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΎ Π±Π΅Π· ΡΡΠΈΠ²
- ΠΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² deployment pipeline, cron Π·Π°Π΄Π°ΡΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³
- ΠΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΉΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΡ ΡΡΡΠ²ΡΡ ΡΠΈΡΡΠΎ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ, ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΠΉΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° Ρ ΠΎΡΡΠΈΠ½Π³
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ Π΅Π΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° VPS Ρ cPanel ΠΈΠ»ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ²ΡΡΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Python Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π²ΠΈ Π΄Π°Π²Π°Ρ ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎΡΡΡΠ° ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡΡΠ°, ΠΊΠΎΠΈΡΠΎ Π²Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ