БпСстСтС 15% ΠΎΡ‚ всички хостинг услуги

ВСствай умСнията си ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠžΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° всСки хостинг ΠΏΠ»Π°Π½

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ
Заглавия
Linux Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ

Π˜Π·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π² 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.txt

Python 3.8+ ΡΡŠΠ²Π΅Ρ‚: ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ file_path.unlink(missing_ok=True) Π·Π° ΠΌΡŠΠ»Ρ‡Π°Π»ΠΈΠ²ΠΎ пропусканС Π½Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ, Π°ΠΊΠΎ Ρ„Π°ΠΉΠ»ΡŠΡ‚ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°, Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°ΠΉΠΊΠΈ нСобходимостта ΠΎΡ‚ FileNotFoundError ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π² Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ скриптовС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5: Π˜Π·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π·Π½Π° дирСктория с pathlib

nano pathlib_remove_dir.py
from 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:

ExceptionCauseRecommended Response
FileNotFoundErrorTarget file or directory does not existLog the error and continue; skip silently if expected
PermissionErrorInsufficient privileges to delete the targetLog and alert; check file ownership and permissions
OSErrorDirectory is not empty (for rmdir), or other OS-level errorUse shutil.rmtree() for non-empty dirs; inspect error details
IsADirectoryErroros.remove() called on a directorySwitch to os.rmdir() or shutil.rmtree()
NotADirectoryErroros.rmdir() called on a fileSwitch 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()

Π‘ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π·Π° сигурност Π² производствСни срСди

ΠŸΡ€ΠΈ писанС Π½Π° скриптовС Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° производствСни ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ слСднитС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° сигурност:

  1. Π’Π°Π»ΠΈΠ΄ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅. Никога Π½Π΅ конструирайтС ΠΏΡŠΡ‚ΠΈΡ‰Π° Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΎΡ‚ нСочистСни Π²Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° потрСбитСля. Π’ΠΈΠ½Π°Π³ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°ΠΉΡ‚Π΅ ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Path.resolve() Π·Π° прСдотвратяванС Π½Π° Π°Ρ‚Π°ΠΊΠΈ с ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.
  1. Π’Π½Π΅Π΄Ρ€Π΅Ρ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° сухо изпълнСниС. ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ дСструктивни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ„Π»Π°Π³ --dry-run ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΎ Π±Π΅Π· дСйствитСлно ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅.
  1. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ изпълнСниС с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ. Π˜Π·ΠΏΡŠΠ»Π½ΡΠ²Π°ΠΉΡ‚Π΅ скриптовС Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° скриптовС Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ root, освСн Π°ΠΊΠΎ Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.
  1. РСгистрирайтС всички ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΉΡ‚Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° ΠΎΠ΄ΠΈΡ‚ Π½Π° всяко ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ» с Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, Ρ†Π΅Π»Π΅Π²ΠΈ ΠΏΡŠΡ‚ΠΈΡ‰Π° ΠΈ потрСбитСля ΠΈΠ»ΠΈ процСса, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ задСйствал опСрацията.
  1. НаправСтС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΡŠΡ€Π²ΠΎ. Π—Π° скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈΡ‚Π΅ копия са Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° вашия ΡΡŠΡ€Π²ΡŠΡ€ с Π½Π°Π΄Π΅ΠΆΠ΄ΠΈ 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 Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π²ΠΈ Π΄Π°Π²Π°Ρ‚ прСцизността ΠΈ надСТдността, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° инфраструктура изисква.