Python_Scripts
8.26K subscribers
1.1K photos
13 videos
674 files
1.65K links
Скрипты 💾 на Python 🐍
- боты 🛠
- парсеры📁
- чекеры🔍
- автоматизация🔧
- многое другое💻

Ваши предложения📝 @cmd_dark @CMD_Vega
Download Telegram
Ты тоже знаешь Python,
но иногда не понимаешь, как подойти к задаче?


В канале — разбор логики решений, рабочий код и прямые эфиры
Без курсов и лишних слов.

👉 @onlyPython
1
github-utility

📱 Python 3.6+
ℹ️ Модули: requests (для API-запросов), argparse (для CLI-аргументов), os, logging. Скрипт в составе пакета github-utility на PyPI.

📌 github-utility — утилита-набор функций + CLI-обёртка, которая упрощает работу с GitHub API: получать инфу о пользователях, репозиториях, создавать issue’ы прямо из командной строки или скриптов. Отлично подходит, когда нужно автоматизировать рабочий процесс, быстро подсветить ошибку или интегрировать с CI.

👨‍💻 Пример использования:
# Установка
pip install github-utility

# CLI примеры:
export GITHUB_ACCESS_TOKEN="токен"

# Получить информацию о пользователе
github-utility get-user --username someuser

# Создать issue в репозитории
github-utility create-issue --owner ownername --repo reponame --title "Test issue" --body "Описание issue"


Фрагменты кода внутри скрипта:
import requests
import argparse
import os

def get_user(token, username):
headers = {"Authorization": f"token {token}"}
resp = requests.get(f"https://api.github.com/users/{username}", headers=headers)
return resp.json()

def create_issue(token, owner, repo, title, body):
headers = {"Authorization": f"token {token}"}
data = {"title": title, "body": body}
resp = requests.post(f"https://api.github.com/repos/{owner}/{repo}/issues", headers=headers, json=data)
return resp.json()


🔗 Репозиторий / исходники на PyPI; исходники находятся там же.

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
2
python_utilities/Parallelizer

📱 Python 3.7+
💾 Модули: multiprocessing, threading, os, io_tools, scripting — часть общей библиотеки утилит python_utilities на GitHub.

📌 Parallelizer — скрипт / утилита внутри python_utilities, который помогает запускать одну и ту же функцию в разных средах (локально, многопроцессно или на кластере через MPI) без изменения кода. То есть ты пишешь функцию “обычно”, а Parallelizer распределит задачи на worker’ы — в зависимости от окружения.

👨‍💻 Пример использования:
from python_utilities.parallel import Parallelizer, make_data_iterator
from python_utilities.scripting import setup_logging

def process_item(item, constant=10):
return item * constant

def main():
setup_logging()
data = list(range(100))
par = Parallelizer(func=process_item, data=data, n_jobs=4)
results = par.run()
print(results)

if __name__ == "__main__":
main()


📌 Что делает:
🟢 Унифицирует способы параллелизации: локально или распределённо
🟢 Не требует переписывания кода функций под “parallel” — простая обёртка
🟢 Подходит для обработки больших наборов данных или задач, которые можно распараллелить


🔗 Репозиторий GitHub

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥3👍2
🔥 Полезные библиотеки Python

package-smoke-test

📌 package-smoke-test — это утилита и библиотека для быстрой проверки установки Python-дистрибутивов или модулей. Позволяет быстро убедиться, что модуль или дистрибутив уже установлен и доступен в системе без лишней мороки.

📌 Особенности библиотеки:
🟠 Простая командная утилита: python3 -m package_smoke_test --module your_module — выдаёт статус установки, путь и версию.
🟠 Подходит для smokescreen-тестов: быстро проверить наличие необходимых пакетов перед запуском скриптов или сервисов.
🟠 Минимум зависимостей и максимум пользы — удобно допилить в CI пайплайн без лишних телодвижений.


⚙️ Установка:
pip install package-smoke-test


🔢 Документация

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍3🔥31
riddle.py из репозитория Trivernis/python-utility-scripts

📱 Python 3.6+
ℹ️ Модули: requests, os, argparse (в репозитории указаны зависимости)

📌 riddle.py — скрипт, который скачивает все изображения из одного или нескольких сабреддитов. Удобен, если ты хочешь быстро собрать изображения по теме, не вручную копируя ссылки.

👨‍💻 Пример кода (адаптированно):
import os
import requests
import argparse

def download_subreddit_images(subreddit, limit=50, dest="downloads"):
os.makedirs(dest, exist_ok=True)
url = f"https://www.reddit.com/r/{subreddit}/.json?limit={limit}"
headers = {"User-Agent": "Mozilla/5.0"}
resp = requests.get(url, headers=headers)
data = resp.json()

for post in data.get("data", {}).get("children", []):
img_url = post["data"].get("url")
if img_url and (img_url.endswith(".jpg") or img_url.endswith(".png")):
filename = os.path.basename(img_url)
path = os.path.join(dest, filename)
try:
img_data = requests.get(img_url).content
with open(path, "wb") as f:
f.write(img_data)
print("Downloaded:", filename)
except Exception as e:
print("Ошибка скачивания", img_url, e)

if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Download images from subreddit")
parser.add_argument("subreddit", help="Name of subreddit")
parser.add_argument("--limit", type=int, default=20, help="How many posts to parse")
parser.add_argument("--dest", default="downloads", help="Destination folder")
args = parser.parse_args()

download_subreddit_images(args.subreddit, limit=args.limit, dest=args.dest)


📌 Что делает:
🟢 Делает HTTP-запрос к API Reddit (JSON)
🟢 Парсит посты, проверяет, есть ли в url изображения (.jpg/.png)
🟢 Скачивает найденные изображения в папку
🟢 Поддерживает указание количества постов через параметр limit
🟢 Печатает статус каждого скачанного файла


🔗 Репозиторий GitHub

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥2
🔥 Полезные библиотеки Python

Flask-Obscure

📌 Flask-Obscure — расширение для Flask, которое маскирует последовательные числовые ID в URL и автоматически декодирует их обратно в функции. Это помогает скрывать настоящую структуру идентификаторов пользователей, заказов и т.п., чтобы затруднить аналитику злоумышленникам, не раскрывая внутреннюю логику.

📌 Особенности библиотеки:
🟢 Поддерживает разные схемы шифрования: num, hex, b32, b64 и tame (особый base32-вариант без гласных).
🟢 При генерации URL через flask.url_for, автоматически превращает числовые ID в “замаскированную” форму, а при маршрутизации — обратно декодирует.
🟢 Интеграция с Jinja2: фильтры доступны в шаблонах — можно прямо выводить “обфусцированные” ID.
🟢 Использует 32-битное “соль” (salt), которую можно задать вручную или через конфигурацию Flask (OBSCURE_SALT) для уникального преобразования.


⚙️ Установка:
pip install Flask-Obscure


🔢 Документация

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
git-delete-merged-branches

📌 Этот скрипт чистит локальный git-репозиторий, удаляя все ветки, которые уже были смержены в main (или любую другую указанную ветку). Помогает поддерживать репозиторий в порядке, когда после фич- или баг-фиксов остаются десятки ненужных веток.

📌 Особенности скрипта:
🟠 Работает прямо из консоли, без зависимостей.
🟠 Можно указать целевую ветку (main, master, develop).
🟠 Поддерживает dry-run — можно посмотреть, какие ветки будут удалены, перед фактическим удалением.
🟠 Ускоряет навигацию и исключает мусор в локальных репозиториях.


⚙️ Использование:
python git-delete-merged-branches.py --base main --dry-run


Чтобы удалить реально:
python git-delete-merged-branches.py --base main


🔢 Репозиторий

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
12
Изоляция рунета ближе, чем ты думаешь

Loading

██████████████] 99%


Роскомнадзору дали карт-бланш на блокировки, а «белые списки» сайтов тестируют уже в десятках регионов. И гайки будут закручиваться только сильнее.

Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.

Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.

Не жди момента «Х». Перестрахуйся подпиской.
😁3
Folder Change Notifier via ntfy.sh

📌 Этот скрипт следит за локальной папкой в реальном времени и отправляет push-уведомления на ваш телефон или браузер через ntfy.sh, когда там что-то меняется — создаётся, удаляется или меняется файл. Просто, мощно и полностью автономно.

📱 Python 3.8+
💾 Модули: watchdog, requests, argparse, logging
Использует ntfy.sh для уведомлений — никаких регистраций, просто отправляет сообщение HTTP запросом.

📌 Особенности скрипта:
🟠Реагирует на события — создание, удаление, переименование или изменение файлов в папке
🟠Отправляет уведомление через ntfy.sh — всплывает на вашем устройстве мгновенно
🟠Поддерживает фильтрацию по расширениям, рекурсивный обход и кастомные настройки через CLI


👨‍💻 Пример использования (CLI):
python folder_monitor.py --path /путь/к/папке --topic mytopic --recursive


🧑‍💻 Код скрипта (folder_monitor.py):
import time, argparse, logging, os, requests
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(message)s")

class FileChangeHandler(FileSystemEventHandler):
def __init__(self, topic, include_extensions=None):
self.topic = topic
self.include_ext = include_extensions

def notify(self, msg):
requests.post(f"https://ntfy.sh/{self.topic}", data=msg)

def dispatch(self, event):
if self.include_ext:
if os.path.splitext(event.src_path)[1].lower() not in self.include_ext:
return
super().dispatch(event)

def on_any_event(self, event):
msg = f"{event.event_type.upper()}: {event.src_path}"
logging.info(msg)
self.notify(msg)

def main():
parser = argparse.ArgumentParser("Folder Monitor with ntfy.sh notifications")
parser.add_argument("--path", required=True, help="Folder path to monitor")
parser.add_argument("--topic", required=True, help="ntfy.sh topic")
parser.add_argument("--extensions", help="Filter extensions, comma-separated (e.g. .txt,.pdf)")
parser.add_argument("--recursive", action="store_true", help="Watch subdirectories")
args = parser.parse_args()

exts = [e.lower() for e in args.extensions.split(",")] if args.extensions else None
handler = FileChangeHandler(args.topic, include_extensions=exts)
observer = Observer()
observer.schedule(handler, args.path, recursive=args.recursive)
observer.start()
logging.info(f"Monitoring: {args.path} (recursive={args.recursive})")

try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()

if __name__ == "__main__":
main()


⚙️ Установка зависимостей:
pip install watchdog requests


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍3
🔥 Полезная библиотека Python

ne2001

📌 ne2001 — Python-реализация модели NE2001 Кордеса-Лацио (Cordes-Lazio) для оценки электронной плотности в межзвёздной среде Млечного Пути. Используется в астрофизике: при работе с пульсарами, радиосигналами, для оценки задержки (dispersion), рассеяния (scattering) и других эффектов при прохождении радиоволн сквозь межзвёздную плазму. (PyPI — ne2001)

📌 Особенности библиотеки:
🟠 Полностью в Python, BSD-лицензия, без сложной компиляции.
🟠 Модель близка к оригинальному Fortran-коду, но адаптирована под современные вычисления, с деталями, которыми Fortran-версия может не обладать.
🟠 Позволяет вычислять “dispersion measure” и “scattering measure” вдоль заданных направлений по координатам галактической системы.
🟠 Есть командная строка + возможность использовать как библиотеку внутри кода.


⚙️ Установка:
pip install ne2001


🔢 Документация

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥2
python-gsmmodem-2025

📱 Python 3.3+
💾 Модули: pyserial — всё взаимодействие с модемом идёт через последовательный порт. Зависящая утилита: GSMTerm (входит в пакет). 

📌 python-gsmmodem-2025 — форк классического python-gsmmodem, обновлённый под современные Python и с доработками под GSM-модемы типа SIM800. Предоставляет удобный API для отправки SMS, обработки входящих сообщений, USSD-запросов и звонков через GSM-модем. Это инструмент автo-автоматики для IoT-устройств, SMS-уведомлений или удалённого управления через GSM.

🔧 Код-пример использования:
from gsmmodem.modem import GsmModem

PORT = '/dev/ttyUSB0'
BAUDRATE = 115200
PIN = None # если есть PIN-код SIMкарты

def handle_sms(sms):
print(f"New SMS from {sms.number}: {sms.text}")

def main():
modem = GsmModem(PORT, BAUDRATE, incomingCallCallback=None, smsReceivedCallback=handle_sms)
modem.connect(PIN)
modem.sendSms('<номер телефона>', 'Привет от python-gsmmodem-2025!')
print("SMS отправлено, ждём входящие…")
modem.run()

if __name__ == "__main__":
main()


⚙️ Установка:
pip install python-gsmmodem-2025


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2