This repository has been archived on 2025-03-27. You can view files and clone it, but cannot push or open issues or pull requests.

145 lines
4.2 KiB
Python

import os
import os.path
import sqlite3
import threading
def traversal_files(_path, _w2t):
# 功能:以列表的形式分别返回指定路径下的文件和文件夹,不包含子目录
# 参数:路径
# 返回值:路径下的文件夹列表 路径下的文件列表
if not os.path.exists(_path):
_w2t(f"数据文件夹{_path}不存在,请确认后重试......", "red", "PathNotExistError")
else:
dirs, files = [], []
for item in os.scandir(_path):
if item.is_dir():
dirs.append(item.path.replace("\\", "/"))
elif item.is_file():
files.append(item.path.replace("\\", "/"))
return dirs, files
def init_logdb(_conn, _cursor):
_conn = sqlite3.connect(":memory:", isolation_level=None, check_same_thread=False, cached_statements=4096)
_cursor = _conn.cursor()
_cursor.execute("PRAGMA journal_mode=wal")
_cursor.execute("PRAGMA wal_checkpoint=TRUNCATE")
_cursor.execute("PRAGMA synchronous=normal")
_cursor.execute("PRAGMA temp_store=memory")
_cursor.execute("PRAGMA mmap_size=30000000000")
_cursor.execute(
"""
create table if not exists logs(
id integer primary key autoincrement,
time DATETIME DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW', 'localtime')),
level text,
module text,
content text
)
"""
)
return _conn, _cursor
def db_lock(func):
def wrapper(*args, **kwargs):
try:
lock.acquire(True)
ret = func(*args, **kwargs)
finally:
lock.release()
return ret
return wrapper
@db_lock
def insert_logdb(_level, _module, _content):
if db_state == "readwrite":
global conn, cursor, lock
if "move.monitor" in _content:
return
data = [_level, _module, repr(_content)]
cursor.execute("insert into logs (level, module, content) values (?, ?, ?)", data)
def insert_logdb_multi(data):
if db_state == "readwrite":
global conn, cursor, lock
# data = [_level, _module, repr(_content)]
# cursor.execute("insert into logs (level, module, content) values (?, ?, ?)", data)
try:
lock.acquire(True)
cursor.executemany("insert into logs (level, module, content) values (?, ?, ?)", data)
finally:
lock.release()
class GetThreadResult(threading.Thread):
def __init__(self, func, args=()):
super(GetThreadResult, self).__init__()
self.func = func
self.args = args
self.result = None
def run(self):
self.result = self.func(*self.args)
def get_result(self):
threading.Thread.join(self) # 等待线程执行完毕
# noinspection PyBroadException
try:
return self.result
except Exception:
return None
# PREFIX = 'assets' # for pyinstaller packaging
PREFIX = '../assets' # for source code testing and debug
log_path = f"{PREFIX}/logs"
conn = None
cursor = None
levels = ["DEBUG", "INFO", "WARNING", "ERROR"]
db_state = "readwrite"
data_dp = {}
data_at = {}
w2t = None
running = False
stop = True
tl_prg = None
f_records = None
ip_addr = "192.168.0.160"
ssh_port = 22
socket_port = 5050
xService_port = 6666
external_port = 8080
modbus_port = 502
upgrade_port = 4567
username = "luoshi"
password = "luoshi2019" # for real robot
# password = "forpqart" # for robot vm
interval = 0.5 # interval after actions being triggered, such as modbus/socket/external communication operations
RADIAN = 57.3 # 180 / 3.1415926
MAX_FRAME_SIZE = 1024
c_md = None
c_hr = None
c_ec = None
c_pd = None
lock = threading.Lock()
conn, cursor = init_logdb(conn, cursor)
# ============== ↓↓↓DEBUG CODE↓↓↓ ==============
# for i in range(100):
# insert_logdb("DEBUG", "clibs", 'running')
# insert_logdb("INFO", "clibs", 'running')
# insert_logdb("WARNING", "clibs", 'running')
# insert_logdb("ERROR", "clibs", 'running')
# with open(f"{log_path}/response.txt", mode="w", encoding="utf-8") as f_res:
# f_res.write("")
# with open(f"{log_path}/logs.txt", mode="w", encoding="utf-8") as f_res:
# f_res.write("")