uslap-query / Code_files /amr_ard.py
uslap's picture
Upload folder using huggingface_hub
7cc8e29 verified
Raw
History Blame Contribute Delete
17.6 kB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
ุฃูŽู…ู’ุฑ ARแธŒ โ€” Operating Kernel (Layer 3)
Root: ุฃ-ุฑ-ุถ
Q2:22 ุงู„ูŽู‘ุฐููŠ ุฌูŽุนูŽู„ูŽ ู„ูŽูƒูู…ู ุงู„ู’ุฃูŽุฑู’ุถูŽ ููุฑูŽุงุดู‹ุง โ€” who made for you the ground a bed
The ground layer: file system, process execution, environment, time.
File System (ู…ูู„ูŽููŽู‘ุงุช):
ุงูู‚ู’ุฑูŽุฃู’_ู…ูู„ูŽูู‘ โ€” read file root: ู‚-ุฑ-ุฃ + ู…-ู„-ู
ุงููƒู’ุชูุจู’_ู…ูู„ูŽูู‘ โ€” write file root: ูƒ-ุช-ุจ + ู…-ู„-ู
ุฃูŽุถููู’_ู…ูู„ูŽูู‘ โ€” append to file root: ุถ-ูŠ-ู
ู…ูู„ูŽููŽู‘ุงุช โ€” list dir root: ู…-ู„-ู
ู…ูŽูˆู’ุฌููˆุฏ โ€” path exists root: ูˆ-ุฌ-ุฏ
ุงูู…ู’ุณูŽุญู’ โ€” delete file root: ู…-ุณ-ุญ
ุงูู†ู’ู‚ูู„ู’ โ€” move/rename root: ู†-ู‚-ู„
ุงูู†ู’ุณูŽุฎู’_ู…ูู„ูŽูู‘ โ€” copy file root: ู†-ุณ-ุฎ
ู…ูŽุณูŽุงุฑ โ€” path operations root: ุณ-ูŠ-ุฑ
Process (ุนูŽู…ูŽู„ููŠูŽู‘ุงุช):
ู†ูŽููู‘ุฐู’ โ€” execute command root: ู†-ู-ุฐ
ุจููŠุฆูŽุฉ โ€” environment var root: ุจ-ูŠ-ุฃ
Time (ูˆูŽู‚ู’ุช):
ูˆูŽู‚ู’ุช โ€” current time root: ูˆ-ู‚-ุช
ุงูู†ู’ุชูŽุธูุฑู’ โ€” sleep/wait root: ู†-ุธ-ุฑ
ู‚ูุณู’ โ€” measure duration root: ู‚-ูŠ-ุณ
System (ู†ูุธูŽุงู…):
ู…ูŽุณูŽุงุฑ_ุญูŽุงู„ููŠ โ€” current dir
ู…ูŽุณูŽุงุฑ_ุจูŽูŠู’ุช โ€” home dir
ู…ูŽุณูŽุงุฑ_ู…ูุทู’ู„ูŽู‚ โ€” absolute path
"""
import sys
import os
import shutil
import subprocess
import time as _time
import glob as _glob
import json
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ARABIC ERROR
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
class ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(Exception):
"""ARแธŒ kernel error"""
pass
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# FILE SYSTEM โ€” ู…ูู„ูŽููŽู‘ุงุช
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def ุงูู‚ู’ุฑูŽุฃู’_ู…ูู„ูŽูู‘(path, ุชุฑู…ูŠุฒ="utf-8"):
"""
ุงูู‚ู’ุฑูŽุฃู’ ู…ูู„ูŽูู‘ โ€” Read file contents (root: ู‚-ุฑ-ุฃ + ู…-ู„-ู)
Q96:1 ุงู‚ู’ุฑูŽุฃู’ โ€” READ
Returns string contents of the file.
Usage:
ูƒูู†ู’ ู†ูŽุตู‘ โ† ุงูู‚ู’ุฑูŽุฃู’_ู…ูู„ูŽูู‘("data.txt")
"""
try:
with open(path, 'r', encoding=ุชุฑู…ูŠุฒ) as f:
return f.read()
except FileNotFoundError:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู…ูู„ูŽูู‘ ุบูŽูŠู’ุฑ ู…ูŽูˆู’ุฌููˆุฏ: {path}')
except PermissionError:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู„ูŽุง ุตูŽู„ูŽุงุญููŠูŽู‘ุฉ ู„ูู„ู‚ูุฑูŽุงุกูŽุฉ: {path}')
except UnicodeDecodeError:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฎูŽุทูŽุฃ ุชูŽุฑู’ู…ููŠุฒ: {path}')
def ุงููƒู’ุชูุจู’_ู…ูู„ูŽูู‘(path, content, ุชุฑู…ูŠุฒ="utf-8"):
"""
ุงููƒู’ุชูุจู’ ู…ูู„ูŽูู‘ โ€” Write to file (root: ูƒ-ุช-ุจ + ู…-ู„-ู)
Q96:4 ุนูŽู„ูŽู‘ู…ูŽ ุจูุงู„ู’ู‚ูŽู„ูŽู…ู โ€” taught by the pen
Overwrites file. Creates parent dirs if needed.
Usage:
ุงููƒู’ุชูุจู’_ู…ูู„ูŽูู‘("output.txt", "ุจูุณู’ู…ู ุงู„ู„ูŽู‘ู‡ู")
"""
try:
parent = os.path.dirname(path)
if parent and not os.path.exists(parent):
os.makedirs(parent, exist_ok=True)
with open(path, 'w', encoding=ุชุฑู…ูŠุฒ) as f:
f.write(str(content))
return True
except (PermissionError, OSError) as e:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู„ูŽุง ุตูŽู„ูŽุงุญููŠูŽู‘ุฉ ู„ูู„ูƒูุชูŽุงุจูŽุฉ: {path} ({e})')
def ุฃูŽุถููู’_ู…ูู„ูŽูู‘(path, content, ุชุฑู…ูŠุฒ="utf-8"):
"""
ุฃูŽุถููู’ ู…ูู„ูŽูู‘ โ€” Append to file (root: ุถ-ูŠ-ู, add/host)
Usage:
ุฃูŽุถููู’_ู…ูู„ูŽูู‘("log.txt", "ุณูŽุทู’ุฑ ุฌูŽุฏููŠุฏ\\n")
"""
try:
with open(path, 'a', encoding=ุชุฑู…ูŠุฒ) as f:
f.write(str(content))
return True
except PermissionError:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู„ูŽุง ุตูŽู„ูŽุงุญููŠูŽู‘ุฉ ู„ูู„ูƒูุชูŽุงุจูŽุฉ: {path}')
def ุณูุทููˆุฑ_ู…ูู„ูŽูู‘(path, ุชุฑู…ูŠุฒ="utf-8"):
"""
ุณูุทููˆุฑ ู…ูู„ูŽูู‘ โ€” Read file as lines (root: ุณ-ุท-ุฑ)
Returns list of lines (stripped).
Usage:
ูƒูู†ู’ ุณูุทููˆุฑ โ† ุณูุทููˆุฑ_ู…ูู„ูŽูู‘("data.txt")
"""
text = ุงูู‚ู’ุฑูŽุฃู’_ู…ูู„ูŽูู‘(path, ุชุฑู…ูŠุฒ)
return text.splitlines()
def ู…ูู„ูŽููŽู‘ุงุช(path=".", ู†ูŽู…ูŽุท="*"):
"""
ู…ูู„ูŽููŽู‘ุงุช โ€” List directory contents (root: ู…-ู„-ู)
Args:
path: Directory to list
ู†ูŽู…ูŽุท: Glob pattern (default "*")
Returns list of filenames.
Usage:
ูƒูู†ู’ ู‚ โ† ู…ูู„ูŽููŽู‘ุงุช(".")
ูƒูู†ู’ ุจ โ† ู…ูู„ูŽููŽู‘ุงุช(".", ู†ูŽู…ูŽุท="*.ุฃู…ุฑ")
"""
full = os.path.join(path, ู†ูŽู…ูŽุท)
return sorted(_glob.glob(full))
def ู…ูŽูˆู’ุฌููˆุฏ(path):
"""
ู…ูŽูˆู’ุฌููˆุฏ โ€” Check if path exists (root: ูˆ-ุฌ-ุฏ, to find/exist)
Usage:
ุฅูู†ู’ ู…ูŽูˆู’ุฌููˆุฏ("data.txt"):
ุงููƒู’ุชูุจู’("ู…ูŽูˆู’ุฌููˆุฏ")
"""
return os.path.exists(path)
def ู…ูู„ูŽูู‘_ุฃูŽู…ู’_ู…ูุฌูŽู„ูŽู‘ุฏ(path):
"""
ู…ูู„ูŽูู‘ ุฃูŽู…ู’ ู…ูุฌูŽู„ูŽู‘ุฏ โ€” Is it a file or directory?
Returns "ู…ูู„ูŽูู‘", "ู…ูุฌูŽู„ูŽู‘ุฏ", or "ุบูŽูŠู’ุฑ_ู…ูŽูˆู’ุฌููˆุฏ"
"""
if os.path.isfile(path):
return "ู…ูู„ูŽูู‘"
elif os.path.isdir(path):
return "ู…ูุฌูŽู„ูŽู‘ุฏ"
return "ุบูŽูŠู’ุฑ_ู…ูŽูˆู’ุฌููˆุฏ"
def ุญูŽุฌู’ู…(path):
"""
ุญูŽุฌู’ู… โ€” File size in bytes (root: ุญ-ุฌ-ู…)
Usage:
ูƒูู†ู’ ุญ โ† ุญูŽุฌู’ู…("data.txt")
"""
if not os.path.exists(path):
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู…ูู„ูŽูู‘ ุบูŽูŠู’ุฑ ู…ูŽูˆู’ุฌููˆุฏ: {path}')
return os.path.getsize(path)
def ุงูู…ู’ุณูŽุญู’(path):
"""
ุงูู…ู’ุณูŽุญู’ โ€” Delete file or empty directory (root: ู…-ุณ-ุญ, to wipe)
Usage:
ุงูู…ู’ุณูŽุญู’("temp.txt")
"""
if not os.path.exists(path):
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู…ูู„ูŽูู‘ ุบูŽูŠู’ุฑ ู…ูŽูˆู’ุฌููˆุฏ: {path}')
try:
if os.path.isfile(path):
os.remove(path)
elif os.path.isdir(path):
os.rmdir(path)
return True
except PermissionError:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู„ูŽุง ุตูŽู„ูŽุงุญููŠูŽู‘ุฉ ู„ูู„ุญูŽุฐู’ู: {path}')
except OSError as e:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฎูŽุทูŽุฃ ุญูŽุฐู’ู: {e}')
def ุงูู†ู’ู‚ูู„ู’(ู…ูŽุตู’ุฏูŽุฑ, ู‡ูŽุฏูŽู):
"""
ุงูู†ู’ู‚ูู„ู’ โ€” Move/rename file (root: ู†-ู‚-ู„, to transfer)
Usage:
ุงูู†ู’ู‚ูู„ู’("old.txt", "new.txt")
"""
if not os.path.exists(ู…ูŽุตู’ุฏูŽุฑ):
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู…ูŽุตู’ุฏูŽุฑ ุบูŽูŠู’ุฑ ู…ูŽูˆู’ุฌููˆุฏ: {ู…ูŽุตู’ุฏูŽุฑ}')
try:
shutil.move(ู…ูŽุตู’ุฏูŽุฑ, ู‡ูŽุฏูŽู)
return True
except Exception as e:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฎูŽุทูŽุฃ ู†ูŽู‚ู’ู„: {e}')
def ุงูู†ู’ุณูŽุฎู’_ู…ูู„ูŽูู‘(ู…ูŽุตู’ุฏูŽุฑ, ู‡ูŽุฏูŽู):
"""
ุงูู†ู’ุณูŽุฎู’ ู…ูู„ูŽูู‘ โ€” Copy file (root: ู†-ุณ-ุฎ)
Q2:106 ู…ูŽุง ู†ูŽู†ุณูŽุฎู’ ู…ูู†ู’ ุขูŠูŽุฉู
Usage:
ุงูู†ู’ุณูŽุฎู’_ู…ูู„ูŽูู‘("original.txt", "backup.txt")
"""
if not os.path.exists(ู…ูŽุตู’ุฏูŽุฑ):
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ู…ูŽุตู’ุฏูŽุฑ ุบูŽูŠู’ุฑ ู…ูŽูˆู’ุฌููˆุฏ: {ู…ูŽุตู’ุฏูŽุฑ}')
try:
shutil.copy2(ู…ูŽุตู’ุฏูŽุฑ, ู‡ูŽุฏูŽู)
return True
except Exception as e:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฎูŽุทูŽุฃ ู†ูŽุณู’ุฎ: {e}')
def ุฃูŽู†ู’ุดูุฆู’_ู…ูุฌูŽู„ูŽู‘ุฏ(path):
"""
ุฃูŽู†ู’ุดูุฆู’ ู…ูุฌูŽู„ูŽู‘ุฏ โ€” Create directory (root: ู†-ุด-ุฃ)
Creates parent directories as needed.
Usage:
ุฃูŽู†ู’ุดูุฆู’_ู…ูุฌูŽู„ูŽู‘ุฏ("output/reports")
"""
os.makedirs(path, exist_ok=True)
return True
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# PATH OPERATIONS โ€” ู…ูŽุณูŽุงุฑ
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def ู…ูŽุณูŽุงุฑ_ุญูŽุงู„ููŠ():
"""ู…ูŽุณูŽุงุฑ ุญูŽุงู„ููŠ โ€” Current working directory (root: ุณ-ูŠ-ุฑ)"""
return os.getcwd()
def ู…ูŽุณูŽุงุฑ_ุจูŽูŠู’ุช():
"""ู…ูŽุณูŽุงุฑ ุจูŽูŠู’ุช โ€” Home directory"""
return os.path.expanduser('~')
def ู…ูŽุณูŽุงุฑ_ู…ูุทู’ู„ูŽู‚(path):
"""ู…ูŽุณูŽุงุฑ ู…ูุทู’ู„ูŽู‚ โ€” Absolute path"""
return os.path.abspath(path)
def ุงูุณู’ู…_ู…ูู„ูŽูู‘(path):
"""ุงูุณู’ู… ู…ูู„ูŽูู‘ โ€” Filename from path"""
return os.path.basename(path)
def ู…ูุฌูŽู„ูŽู‘ุฏ_ู…ูู„ูŽูู‘(path):
"""ู…ูุฌูŽู„ูŽู‘ุฏ ู…ูู„ูŽูู‘ โ€” Directory from path"""
return os.path.dirname(path)
def ุงูู…ู’ุชูุฏูŽุงุฏ(path):
"""ุงูู…ู’ุชูุฏูŽุงุฏ โ€” File extension"""
return os.path.splitext(path)[1]
def ุตูู„ู’_ู…ูŽุณูŽุงุฑ(*parts):
"""ุตูู„ู’ ู…ูŽุณูŽุงุฑ โ€” Join path components"""
return os.path.join(*parts)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# PROCESS EXECUTION โ€” ุนูŽู…ูŽู„ููŠูŽู‘ุงุช
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def ู†ูŽููู‘ุฐู’(ุฃูŽู…ู’ุฑ, ู…ูู‡ู’ู„ูŽุฉ=30):
"""
ู†ูŽููู‘ุฐู’ โ€” Execute a shell command (root: ู†-ู-ุฐ, penetrate/execute)
Args:
ุฃูŽู…ู’ุฑ: Command string to execute
ู…ูู‡ู’ู„ูŽุฉ: Timeout in seconds (default 30)
Returns dict with:
ุฎูุฑููˆุฌ (stdout), ุฎูŽุทูŽุฃ (stderr), ุฑูŽู…ู’ุฒ (return code)
Usage:
ูƒูู†ู’ ู† โ† ู†ูŽููู‘ุฐู’("ls -la")
ุงููƒู’ุชูุจู’(ุฎูุฐู’(ู†, "ุฎูุฑููˆุฌ"))
"""
try:
result = subprocess.run(
ุฃูŽู…ู’ุฑ, shell=True, capture_output=True, text=True,
timeout=ู…ูู‡ู’ู„ูŽุฉ
)
return {
'ุฎูุฑููˆุฌ': result.stdout,
'ุฎูŽุทูŽุฃ': result.stderr,
'ุฑูŽู…ู’ุฒ': result.returncode,
}
except subprocess.TimeoutExpired:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุงูู†ู’ุชูู‡ูŽุงุก ุงู„ู…ูู‡ู’ู„ูŽุฉ ({ู…ูู‡ู’ู„ูŽุฉ} ุซูŽุงู†ููŠูŽุฉ): {ุฃูŽู…ู’ุฑ}')
except Exception as e:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฎูŽุทูŽุฃ ุชูŽู†ู’ูููŠุฐ: {e}')
def ู†ูŽููู‘ุฐู’_ุฃูŽู…ู’ุฑ(ุฃูŽู…ู’ุฑ, ู…ูู‡ู’ู„ูŽุฉ=30):
"""
ู†ูŽููู‘ุฐู’ ุฃูŽู…ู’ุฑ โ€” Execute and return just stdout (convenience).
Usage:
ูƒูู†ู’ ู†ูŽุตู‘ โ† ู†ูŽููู‘ุฐู’_ุฃูŽู…ู’ุฑ("date")
"""
result = ู†ูŽููู‘ุฐู’(ุฃูŽู…ู’ุฑ, ู…ูู‡ู’ู„ูŽุฉ)
if result['ุฑูŽู…ู’ุฒ'] != 0:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฃูŽู…ู’ุฑ ููŽุดูŽู„ (ุฑูŽู…ู’ุฒ {result["ุฑูŽู…ู’ุฒ"]}): {result["ุฎูŽุทูŽุฃ"].strip()}')
return result['ุฎูุฑููˆุฌ'].strip()
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ENVIRONMENT โ€” ุจููŠุฆูŽุฉ
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def ุจููŠุฆูŽุฉ(ุงูุณู’ู…, ู‚ููŠู…ูŽุฉ_ุงููู’ุชูุฑูŽุงุถููŠูŽู‘ุฉ=None):
"""
ุจููŠุฆูŽุฉ โ€” Get environment variable (root: ุจ-ูŠ-ุฃ)
Usage:
ูƒูู†ู’ ู…ูŽุณูŽุงุฑ โ† ุจููŠุฆูŽุฉ("PATH")
ูƒูู†ู’ ู…ูุณู’ุชูŽุฎู’ุฏูู… โ† ุจููŠุฆูŽุฉ("USER", "ุบูŽูŠู’ุฑ_ู…ูŽุนู’ุฑููˆู")
"""
return os.environ.get(ุงูุณู’ู…, ู‚ููŠู…ูŽุฉ_ุงููู’ุชูุฑูŽุงุถููŠูŽู‘ุฉ)
def ุงูุฌู’ุนูŽู„ู’_ุจููŠุฆูŽุฉ(ุงูุณู’ู…, ู‚ููŠู…ูŽุฉ):
"""
ุงูุฌู’ุนูŽู„ู’ ุจููŠุฆูŽุฉ โ€” Set environment variable
Usage:
ุงูุฌู’ุนูŽู„ู’_ุจููŠุฆูŽุฉ("MY_VAR", "value")
"""
os.environ[ุงูุณู’ู…] = str(ู‚ููŠู…ูŽุฉ)
return True
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# TIME โ€” ูˆูŽู‚ู’ุช
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def ูˆูŽู‚ู’ุช():
"""
ูˆูŽู‚ู’ุช โ€” Current timestamp (root: ูˆ-ู‚-ุช)
Returns seconds since epoch as float.
Usage:
ูƒูู†ู’ ุงู„ุขู† โ† ูˆูŽู‚ู’ุช()
"""
return _time.time()
def ูˆูŽู‚ู’ุช_ู†ูŽุตู‘(ุชูŽู†ู’ุณููŠู‚="%Y-%m-%d %H:%M:%S"):
"""
ูˆูŽู‚ู’ุช ู†ูŽุตู‘ โ€” Current time as formatted string
Usage:
ูƒูู†ู’ ุช โ† ูˆูŽู‚ู’ุช_ู†ูŽุตู‘()
ุงููƒู’ุชูุจู’(ุช)
"""
return _time.strftime(ุชูŽู†ู’ุณููŠู‚)
def ุงูู†ู’ุชูŽุธูุฑู’(ุซูŽูˆูŽุงู†ู):
"""
ุงูู†ู’ุชูŽุธูุฑู’ โ€” Sleep/wait (root: ู†-ุธ-ุฑ, to watch/wait)
Usage:
ุงูู†ู’ุชูŽุธูุฑู’(ูข)
"""
_time.sleep(ุซูŽูˆูŽุงู†ู)
def ู‚ูุณู’(ุฏูŽุงู„ูŽู‘ุฉ):
"""
ู‚ูุณู’ โ€” Measure execution time (root: ู‚-ูŠ-ุณ, to measure)
Returns (result, elapsed_seconds).
Usage:
ูƒูู†ู’ ู†ุŒ ุฒ โ† ู‚ูุณู’(ู…ูŽุถู’ุฑููˆุจุŒ ูกู )
"""
start = _time.time()
result = ุฏูŽุงู„ูŽู‘ุฉ()
elapsed = _time.time() - start
return result, elapsed
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# JSON โ€” ุชูŽู†ู’ุณููŠู‚
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def ุงูู‚ู’ุฑูŽุฃู’_ุฌุณู†(path):
"""ุงูู‚ู’ุฑูŽุฃู’ JSON file, return dict/list."""
text = ุงูู‚ู’ุฑูŽุฃู’_ู…ูู„ูŽูู‘(path)
try:
return json.loads(text)
except json.JSONDecodeError as e:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฎูŽุทูŽุฃ ุชูŽู†ู’ุณููŠู‚ JSON: {e}')
def ุงููƒู’ุชูุจู’_ุฌุณู†(path, data):
"""ุงููƒู’ุชูุจู’ data as JSON file."""
text = json.dumps(data, ensure_ascii=False, indent=2)
ุงููƒู’ุชูุจู’_ู…ูู„ูŽูู‘(path, text)
return True
def ู…ูู†ู’_ุฌุณู†(text):
"""Parse JSON string to dict/list."""
try:
return json.loads(text)
except json.JSONDecodeError as e:
raise ุฎูŽุทูŽุฃ_ุฃูŽุฑู’ุถ(f'ุฎูŽุทูŽุฃ ุชูŽู†ู’ุณููŠู‚ JSON: {e}')
def ุฅูู„ูŽู‰_ุฌุณู†(data):
"""Convert dict/list to JSON string."""
return json.dumps(data, ensure_ascii=False, indent=2)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# SYSTEM INFO โ€” ู†ูุธูŽุงู…
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def ู†ูุธูŽุงู…():
"""
ู†ูุธูŽุงู… โ€” System info dict
Returns: {"ู…ูู†ูŽุตูŽู‘ุฉ": platform, "ู…ูุณู’ุชูŽุฎู’ุฏูู…": user, "ู…ูŽุณูŽุงุฑ": cwd}
"""
return {
'ู…ูู†ูŽุตูŽู‘ุฉ': sys.platform,
'ู…ูุณู’ุชูŽุฎู’ุฏูู…': os.environ.get('USER', os.environ.get('USERNAME', '')),
'ู…ูŽุณูŽุงุฑ': os.getcwd(),
'ุจูŽูŠู’ุซููˆู†': sys.version.split()[0],
}
if __name__ == '__main__':
print('ุจูุณู’ู…ู ุงู„ู„ูŽู‘ู‡ู ุงู„ุฑูŽู‘ุญู’ู…ูŽูฐู†ู ุงู„ุฑูŽู‘ุญููŠู…ู')
print(f'ARแธŒ Kernel โ€” ุฃ-ุฑ-ุถ')
print()
info = ู†ูุธูŽุงู…()
for k, v in info.items():
print(f' {k}: {v}')
print()
print(f'ูˆูŽู‚ู’ุช: {ูˆูŽู‚ู’ุช_ู†ูŽุตู‘()}')
print(f'ู…ูŽุณูŽุงุฑ: {ู…ูŽุณูŽุงุฑ_ุญูŽุงู„ููŠ()}')
print(f'ุจูŽูŠู’ุช: {ู…ูŽุณูŽุงุฑ_ุจูŽูŠู’ุช()}')
print()
amr_files = ู…ูู„ูŽููŽู‘ุงุช('.', ู†ูŽู…ูŽุท='*.ุฃู…ุฑ')
print(f'ู…ูู„ูŽููŽู‘ุงุช .ุฃู…ุฑ: {len(amr_files)}')
for f in amr_files:
print(f' {ุงูุณู’ู…_ู…ูู„ูŽูู‘(f)} ({ุญูŽุฌู’ู…(f)} bytes)')