🔴 Exit code
Повернемось до теми Корисні речі, які варто знати про процес
Код завершення процесу (exit code, return code) — це числове значення, яке процес повертає операційній системі після свого завершення.
Воно показує, як саме процес завершився:
0️⃣ 0 — успішне виконання без помилок;
1️⃣ Будь-яке ненульове значення, вказує на помилку або особливу причину завершення, залежно від програми.
Код завершення використовується іншими процесами, скриптами чи системами автоматизації (наприклад, bash, make, systemd) для визначення, чи потрібно вважати виконання команди успішним або повторити/обробити помилку.
У Linux перевірити exit code останньої команди можна через змінну
У Windows щоб отримати код завершення останньої команди, використовують змінну
Для прикладу розглянемо код
sys.exit() задає код завершення процесу, для помилок ми використали значення 1,2,3
Запустимо наш код у командному рядку:
Linux
Windows
Команда echo виведе нам код з яким завершився процес.
Так як відбувається ділення на 0 — код завершення буде 3.
Інший процес або скрипт може легко дізнатись код завершення і прийняти відповідне рішення.
Повернемось до теми Корисні речі, які варто знати про процес
Код завершення процесу (exit code, return code) — це числове значення, яке процес повертає операційній системі після свого завершення.
Воно показує, як саме процес завершився:
0️⃣ 0 — успішне виконання без помилок;
1️⃣ Будь-яке ненульове значення, вказує на помилку або особливу причину завершення, залежно від програми.
Код завершення використовується іншими процесами, скриптами чи системами автоматизації (наприклад, bash, make, systemd) для визначення, чи потрібно вважати виконання команди успішним або повторити/обробити помилку.
У Linux перевірити exit code останньої команди можна через змінну
$?.У Windows щоб отримати код завершення останньої команди, використовують змінну
%ERRORLEVEL%.Для прикладу розглянемо код
import sys
def main() -> int:
if len(sys.argv) != 3:
print("Usage: python script.py <num1> <num2>", file=sys.stderr)
return 1
try:
a = float(sys.argv[1])
b = float(sys.argv[2])
print(a / b)
return 0
except ValueError:
print("Error: arguments must be numbers", file=sys.stderr)
return 2
except ZeroDivisionError:
print("Error: division by zero", file=sys.stderr)
return 3
if __name__ == "__main__":
sys.exit(main())
sys.exit() задає код завершення процесу, для помилок ми використали значення 1,2,3
Запустимо наш код у командному рядку:
Linux
python3 main.py 1 0
echo $?
Windows
python main.py 1 0
echo %ERRORLEVEL%
Команда echo виведе нам код з яким завершився процес.
Так як відбувається ділення на 0 — код завершення буде 3.
Інший процес або скрипт може легко дізнатись код завершення і прийняти відповідне рішення.
❤1👍1
Підбірка відео укр. по веб фреймворку FastApi від "Python Decoded"
1. FastApi Українською - Резолвери Схеми Роутери
2. FastApi Українською - Обробка Помилок та Middleware
3. FastApi Українською - Ін'єкція Залежностей
4. FastApi Українською - Інтеграція Бази Даних
1. FastApi Українською - Резолвери Схеми Роутери
2. FastApi Українською - Обробка Помилок та Middleware
3. FastApi Українською - Ін'єкція Залежностей
4. FastApi Українською - Інтеграція Бази Даних
YouTube
1. FastApi Українською - Резолвери Схеми Роутери
В цій серії відео ми познайомимось з Пайтон Веб фреймворком FastApi і побудуємо власний веб застосунок.
В цьому відео ми познайомимось з такими поняттями як:
- Резолвери - resolvers
- Роутери - routers
- Схеми - schemas
Та напишемо набір CRUD операцій для…
В цьому відео ми познайомимось з такими поняттями як:
- Резолвери - resolvers
- Роутери - routers
- Схеми - schemas
Та напишемо набір CRUD операцій для…
👍4
Підбірка англ. відео про Dependency Injection від ArjanCodes:
🔗 Dependency Injection Explained in 7 Minutes
🔗 Should You Use Dependency Injection Frameworks?
🔗 Dependency INVERSION vs Dependency INJECTION in Python
🔗 Dependency Injection Explained in 7 Minutes
🔗 Should You Use Dependency Injection Frameworks?
🔗 Dependency INVERSION vs Dependency INJECTION in Python
YouTube
Dependency Injection Makes Code Easier to Change and Test
👷 Review code better and faster with my 3-Factor Framework: https://arjan.codes/diagnosis.
In this video, I'll explain why dependency injection is a game-changer for your coding projects. Creating loosely coupled code is key to making the code more flexible…
In this video, I'll explain why dependency injection is a game-changer for your coding projects. Creating loosely coupled code is key to making the code more flexible…
❤1
Git. Ситуація: Створили репозиторій.Є файл A.txt. Виконали: git add A.txt
Потрібно прибрати A.txt зі staging, не видаляючи файл з диска і не змінюючи його вміст. Що можна виконати? (декілька варіантів)
Потрібно прибрати A.txt зі staging, не видаляючи файл з диска і не змінюючи його вміст. Що можна виконати? (декілька варіантів)
Anonymous Poll
16%
git restore A.txt
37%
git reset A.txt
0%
git restore A.txt
16%
git rm A.txt
63%
git restore --staged A.txt
🟣 Потоки вводу/виводу (Input/Output Streams, stdin/stdout/stderr)
Повернемось до теми Корисні речі, які варто знати про процес
У попередньому прикладі коду я використав такий вивід:
Що це значить?
Подивимось у документацію:
🔗 Документація
Простими слова file це те куди виводити рядок нашого повідомлення. По замовченню вивід відбувається у sys.stdout. Також вивід може відбуватись у реальний файл або у поток sys.stdout - спеціальний потік для помилок.
⚠️ Варто зауважити: що потік в/в в анг. варіанті це stream i/o і не варто його плутати з thread - потоком виконання.
sys.stdout як sys.stderr це два потоки для виводу (stream output) обидва виводять текст у консоль користувач не бачить різницю між ними візуально.
При програмній автоматизації процесів можливо перехоплювати текст з обох потоків, можемо окремо мати звичайний тест інформаційного характеру з sys.stdout і окремо з sys.stderr
Є ще третій поток sys.stdin - це поток для вводу, він необхідний для читання вводу користувача у консоль.
При програмній автоматизації ми також можемо вводити текст замість користувача.
👉 Практична цінність знання про потоки в/в полягає саме у можливості автоматизувати взаємодію між процесами (IPC) шляхом їх перехоплення.
Повернемось до теми Корисні речі, які варто знати про процес
У попередньому прикладі коду я використав такий вивід:
print("Usage: python script.py <num1> <num2>", file=sys.stderr)Що це значить?
Подивимось у документацію:
print(*objects, sep=' ', end='\n', file=None, flush=False)
The file argument must be an object with a write(string) method; if it is not present or None,
sys.stdout will be used. Since printed arguments are converted to text strings,
print() cannot be used with binary mode file objects. For these, use file.write(...) instead.
🔗 Документація
Простими слова file це те куди виводити рядок нашого повідомлення. По замовченню вивід відбувається у sys.stdout. Також вивід може відбуватись у реальний файл або у поток sys.stdout - спеціальний потік для помилок.
⚠️ Варто зауважити: що потік в/в в анг. варіанті це stream i/o і не варто його плутати з thread - потоком виконання.
sys.stdout як sys.stderr це два потоки для виводу (stream output) обидва виводять текст у консоль користувач не бачить різницю між ними візуально.
При програмній автоматизації процесів можливо перехоплювати текст з обох потоків, можемо окремо мати звичайний тест інформаційного характеру з sys.stdout і окремо з sys.stderr
Є ще третій поток sys.stdin - це поток для вводу, він необхідний для читання вводу користувача у консоль.
При програмній автоматизації ми також можемо вводити текст замість користувача.
👉 Практична цінність знання про потоки в/в полягає саме у можливості автоматизувати взаємодію між процесами (IPC) шляхом їх перехоплення.
👍1
🟢 Потоки введення/виведення. Практика.
У Python для створення підпроцесів використовується бібліотека subprocess.
Вона дозволяє запускати програми та працювати з їхніми потоками введення/виведення.
subprocess добре підходить для простих випадків з синхронном кодом.
Але цікавіше розглянути асинхронний приклад з asyncio, який працює одразу з усіма трьома потоками введення/виведення.
Ідея проста: запускаємо Python у інтерактивному режимі та виконуємо дві операції — 2+2 і 1/0.
Вивід у консоль:
Як бачимо ми отримали текст окремо stdout і окремо stderr.
Звісно аналогічним чином ми можемо запускати системі утіліти або інші програми написані на інших мовах програмування — це простір для автоматизації.
Але трохи дивно чому python пише текст привітання саме у stderr
У Python для створення підпроцесів використовується бібліотека subprocess.
Вона дозволяє запускати програми та працювати з їхніми потоками введення/виведення.
subprocess добре підходить для простих випадків з синхронном кодом.
Але цікавіше розглянути асинхронний приклад з asyncio, який працює одразу з усіма трьома потоками введення/виведення.
Ідея проста: запускаємо Python у інтерактивному режимі та виконуємо дві операції — 2+2 і 1/0.
import asyncio
import sys
async def read_stream(name: str, stream: asyncio.StreamReader):
while data := await stream.readline():
line = data.decode("utf8").rstrip()
print(f"[{name}]", line)
async def main():
process = await asyncio.create_subprocess_exec(
sys.executable, "-i", # python -i
stdin=asyncio.subprocess.PIPE,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout_task = asyncio.create_task(
read_stream("stdout", process.stdout),
)
stderr_task = asyncio.create_task(
read_stream("stderr", process.stderr),
)
process.stdin.write(b"2+2\n")
await process.stdin.drain()
process.stdin.write(b"1/0\n")
await process.stdin.drain()
process.stdin.write(b"exit()\n")
await process.stdin.drain()
await process.wait() # Чекаємо завершення підпроцесу
Вивід у консоль:
[stderr] Python 3.11.6 (tags/v3.11.6:8b6ee5b, Oct 2 2023, 14:57:12) [MSC v.1935 64 bit (AMD64)] on win32
[stderr] Type "help", "copyright", "credits" or "license" for more information.
[stdout] 4
[stderr] >>> >>> Traceback (most recent call last):
[stderr] File "<stdin>", line 1, in <module>
[stderr] ZeroDivisionError: division by zero
[stderr] >>>
Як бачимо ми отримали текст окремо stdout і окремо stderr.
Звісно аналогічним чином ми можемо запускати системі утіліти або інші програми написані на інших мовах програмування — це простір для автоматизації.
Python Materials For Beginners
Знову git www.youtube.com/watch?v=y6meVhckYmQ #git
Непогане відео про "Environment variables" та .env файли.
https://www.youtube.com/watch?v=Hn5sgLafAMQ
https://www.youtube.com/watch?v=Hn5sgLafAMQ
YouTube
Your .env File Is Lying to You
This video breaks down env vars from the operating system level up — where they live, how they move between processes, and why your app works locally but breaks in Docker.
Environment variables aren't a framework feature — they're an OS primitive. Every…
Environment variables aren't a framework feature — they're an OS primitive. Every…
🔥1
Цікаве відео про черги повідомлень.
#rabbitmq #kafka
https://www.youtube.com/watch?v=byCvosoavLw&pp=ugUEEgJ1aw%3D%3D
#rabbitmq #kafka
https://www.youtube.com/watch?v=byCvosoavLw&pp=ugUEEgJ1aw%3D%3D
YouTube
Kafka чи RabitMQ - Що обрати?
Kafka та RabbitMQ вирішують різні проблеми, обери неправильно і будеш змушений усе перероблювати. Це відео в деталях розглядає як вони працюють під копотом — RabbitMQ як розумний брокер повідомлень, який виконує маршрутизацію та видаляє повідомлення, Kafka…
Трохи про Rotating Proxy.
(Гадаю ця інформація буде корисна при покупці проксі для скрапінгу даних.)
По режиму керування:
1. Per-request rotation
2. Session-based rotation
3. Automated request management
За типом інфраструктури/провайдера:
1. Residential High reliability Real home IPs
2. Datacenter Fast & cost-efficient Server IPs
3. Mobile Carrier IPs Mobile-network routing
4. ISP Datacenter speed Consumer-ISP routing
#proxy
https://www.youtube.com/watch?v=YTQVusxV-Bs
(Гадаю ця інформація буде корисна при покупці проксі для скрапінгу даних.)
По режиму керування:
1. Per-request rotation
2. Session-based rotation
3. Automated request management
За типом інфраструктури/провайдера:
1. Residential High reliability Real home IPs
2. Datacenter Fast & cost-efficient Server IPs
3. Mobile Carrier IPs Mobile-network routing
4. ISP Datacenter speed Consumer-ISP routing
#proxy
https://www.youtube.com/watch?v=YTQVusxV-Bs
YouTube
What Is a Rotating Proxy? Types, Uses & Setup
Your scraper's running fine, then your success rate tanks and the data stops flowing. Sound familiar? A rotating proxy fixes exactly that.
In this video, Vidas from Oxylabs breaks down how IP rotation actually works under the hood, and why it's the difference…
In this video, Vidas from Oxylabs breaks down how IP rotation actually works under the hood, and why it's the difference…
Як на мене дуже цікаво буде спробувати RAG.
#rag #embedding
https://www.youtube.com/watch?v=QmiaI5HiLmg
#rag #embedding
https://www.youtube.com/watch?v=QmiaI5HiLmg
YouTube
RAG - детально для Початківців (RAG, Embedding, Vector DB)
Сьогодні ми говоримо про RAG, Embeddings та пошук за семантичним співпадінням.
Також ми познайомимось із векторними базами даних.
Підтримати канал:
Patreon: https://patreon.com/python_decoded
Посилання на Банку: https://send.monobank.ua/jar/3CiHEjphUu…
Також ми познайомимось із векторними базами даних.
Підтримати канал:
Patreon: https://patreon.com/python_decoded
Посилання на Банку: https://send.monobank.ua/jar/3CiHEjphUu…
🔥5❤2
Ще одне корисне відео, рекомендую до ознайомлення.
#pydantic
https://www.youtube.com/watch?v=H0Q-o-4ebb4
#pydantic
https://www.youtube.com/watch?v=H0Q-o-4ebb4
YouTube
Pydantic - Просунуті Перевірки та Перетворення Даних.
Продовжуємо знайомитись із бібліотекою Pydantic, і спробуємо дослідити набір спеціалізованих інструментів для створення просунутих перевірок.
- BeforeValidator
- AfterValidator
- PlainValidator
- WrapValidator
- @field_validator
- @model_validator
Підтримати…
- BeforeValidator
- AfterValidator
- PlainValidator
- WrapValidator
- @field_validator
- @model_validator
Підтримати…
🔥2