HiveNetCore.utils.run_tool module¶
运行参数处理通用工具
- class HiveNetCore.utils.run_tool.AsyncTools[源代码]¶
基类:
object异步调用的工具类
- async classmethod async_for_iter(async_iter_obj, func, *args, **kwargs)[源代码]¶
处理异步迭代器的异步函数
- 参数
AsyncGenerator (AsyncGenerator|Iterator) – 要处理的迭代器对象
func (function) –
处理函数对象
注: 处理函数的第一个入参是每次迭代的返回对象
处理函数的其他固定位置入参 (-) –
处理函数的kv入参 (-) –
- async classmethod async_run_coroutine(coroutine_obj) Any[源代码]¶
异步方式执行协程返回结果
- 参数
coroutine_obj (coroutine) – 协程函数
- 返回
处理结果
- 返回类型
Any
- classmethod nest_asyncio_apply(loop=None)[源代码]¶
开启允许异步调用嵌套执行
(解决This event loop is already running的异常)
- 参数
loop (AbstractEventLoop) – default=None, 异步事件对象
- classmethod sync_call(func, *args, **kwargs) Any[源代码]¶
同步方式执行函数
- 参数
func (function) – 要执行的函数对象
执行函数的固定入参 (-) –
执行函数的kv入参 (-) –
- 返回
函数返回值
- 返回类型
Any
- class HiveNetCore.utils.run_tool.RunTool[源代码]¶
基类:
object运行参数处理通用类
提供各类运行环境处理相关的常用工具函数( 静态方法)
- classmethod exec_sys_cmd(cmd: str, shell_encoding: Optional[str] = None, stop_var: Optional[list] = None, use_stop_signal: Optional[int] = None)[源代码]¶
执行系统命令
- 参数
cmd (str) – 要执行的命令
shell_encoding (str) –
default=None, 传入指定的编码
注: 如果不传入, 尝试获取全局变量 SHELL_ENCODING, 如果也找不到, 则默认为’utf-8’
stop_var (list) – default=None, 用于在运行过程中在外部设置停止标志的列表变量, 第一个值为True时停止线程
use_stop_signal (int) – default=None, 使用指定signal进行中止, 例如 signal.CTRL_C_EVENT
- 返回
返回命令执行结果数组, 第一个为 exit_code, 0代表成功; 第二个为输出信息行数组
- 返回类型
(int, list)
- classmethod exec_sys_cmd_not_output(cmd: str, shell_encoding: Optional[str] = None, stop_var: Optional[list] = None, use_stop_signal: Optional[int] = None)[源代码]¶
执行系统命令不输出信息
- 参数
cmd (str) – 要执行的命令
shell_encoding (str) –
default=None, 传入指定的编码
注: 如果不传入, 尝试获取全局变量 SHELL_ENCODING, 如果也找不到, 则默认为’utf-8’
stop_var (list) – default=None, 用于在运行过程中在外部设置停止标志的列表变量, 第一个值为True时停止线程
use_stop_signal (int) – default=None, 使用指定signal进行中止, 例如 signal.CTRL_C_EVENT
- 返回
返回命令执行结果数组, 第一个为 exit_code, 0代表成功; 第二个为输出信息行数组
- 返回类型
(int, list)
- static get_current_function_name(frame_obj=None, is_with_class=True, is_with_module=False)[源代码]¶
@param {frameobject} frame_obj=None - 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数
- 参数
is_with_module (bool) –
default=False, 返回函数名是否含模块名
注意: 如果该参数为True, 则忽略is_with_class参数
- static get_current_function_object(frame_obj=None)[源代码]¶
获取当前运行函数的函数对象
- 参数
frame_obj (frameobject) – default=None, 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数
- static get_current_function_parameter_defines(frame_obj=None)[源代码]¶
获取当前运行函数的函数调用参数定义信息
- 参数
frame_obj (frameobject) – default=None, 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数
- static get_current_function_parameter_values(frame_obj=None, fun_obj=None, is_simple_mode=False, ignore_first: bool = False)[源代码]¶
获取当前运行函数的函数调用参数取值信息
- 参数
frame_obj (frameobject) – default=None, 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数
fun_obj (function) – default=None, 函数对象, 如不传入则通过frame获取, 传入可兼容静态函数的情况
is_simple_mode (bool) – default=False, 是否简单模式
ignore_first (bool) – default=False, 是否忽略第一个参数( 遇到是对象实例成员函数的情况可设置为True)
- static get_function_name(fun_object, is_with_class=True, is_with_module=False)[源代码]¶
获取函数对象的定义名
- 参数
fun_object (function) – 函数对象
is_with_class (bool) – default=True, 返回函数名是否含类名
is_with_module (bool) –
default=False, 返回函数名是否含模块名
注意: 如果该参数为True, 则忽略is_with_class参数
- static get_function_parameter_defines(fun_object)[源代码]¶
获取函数调用参数定义信息
- 参数
fun_object (function) – 函数对象
- static get_global_var(key, default=None)[源代码]¶
根据key获取全局变量的值, 如果找不到key则返回None
- 参数
key (string) – 要获取的全局变量key值
default (object) – default=None, 获取不到返回的默认值
- 返回
全局变量的值, 如果找不到key则返回None
- 返回类型
object
- static get_kv_opts()[源代码]¶
获取Key=Value格式的命令行输入参数
- 返回
命令行参数字典: key为参数名, value为参数值
- 返回类型
dict
示例
命令行# python ggeneric.py key1=value1 key2=value2 key3=”value 3” “key 4”=value4 “key 5”=”value 5”
input_para = RunTools.get_kv_opts()
- static get_object_attr_list(obj)[源代码]¶
获取对象的属性清单
- 参数
obj (object) – 要获取信息的对象
- 返回
返回的属性清单数组( 属性名列表)
- 返回类型
list
- static get_object_class(obj)[源代码]¶
获取对象的类
- 参数
obj (object) – 要获取信息的对象
- 返回
返回的对象的类, 可以直接创建新对象, 例如:
_class = get_object_class(obj)
_newobj = _class(para=’’)
- 返回类型
class
- static get_parent_function_frame(call_fun_level)[源代码]¶
获取指定层级的调用函数框架( fake_frame) , 从当前调用函数开始往逐级向上获取
- 参数
call_fun_level (int) –
要获取的函数名所属层级:
-1 - 返回函数自身框架
0 - 返回调用本函数的函数框架
1 - 返回调用本函数的函数的上1级函数框架
n - 返回调用本函数的函数的上n级函数框架
- 返回
返回指定层级函数的框架( fake_frame) , 可以通过fake_frame.f_code获取代码相关信息
- 返回类型
fake_frame
- classmethod get_sys_environ(key: str, default: Optional[str] = None) str[源代码]¶
获取系统环境变量的值
- 参数
key (str) – 要获取的环境变量
default (str) – default=None, 获取不到时返回的默认值
- 返回
环境变量值
- 返回类型
str
- static is_function_has_var_parameter(fun_object, var_positional=True, var_keyword=True)[源代码]¶
检查函数是否有动态参数
- 参数
-函数对象 (fun_object) –
var_positional (bool) – default=True, 检查是否有类似*args的参数
var_keyword (bool) – default=True, 检查是否有类似类似**kwargs的参数
- classmethod platform_info() dict[源代码]¶
获取平台信息
- 返回
平台信息字典
platform - 操作系统平台信息(sys.platform), win32, cygwin, linux, darwin
machine - 机器类型(platform.machine()), i386, x86, x86_64, AMD64, arm64
bits - 操作系统位数(platform.architecture()), 32bit, 64bit
system - 操作系统名(platform.system()), Linux, Windows, Darwin
release - 操作系统发行版本(platform.release()), 2.0.0, nt
node - 网络机器名(platform.node())
platform_alias - 操作系统版本信息(platform.platform()), Windows-7-6.1.7601-SP1, macOS-11.4-arm64-arm-64bit
- 返回类型
dict
- static set_global_logger(logger)[源代码]¶
设置全局使用的logger对象
- 参数
logger (object) –
logger对象,传入对象需满足:
1、标准logging的logger对象
2、自定义的日志类对象, 但应实现info、warning、error等标准方法
- static set_global_var(key, value)[源代码]¶
设置全局变量的值, 后续可以通过Key获取到指定的值, 如果如果key存在将覆盖
- 参数
key (string) – 要设置的全局变量key值
value (object) – 要设置的全局变量值
- static single_process_del_lockfile(process_name='', base_path='')[源代码]¶
强制删除进程锁文件
进程锁处理的辅助函数, 强制删除进程锁文件
- 参数
process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名
base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录
- static single_process_enter(process_name='', base_path='', is_try_del_lockfile=False)[源代码]¶
获取进程锁: 如果获取失败代表锁已被其他进程占有, 可选择结束进程以控制同一时间只有一个进程执行
- 参数
process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名
base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录
is_try_del_lockfile (bool) – default=False, 是否尝试先删除锁文件( 可以应对强制关闭进程未自动删除锁文件的情况)
- 返回
是否获取进程锁成功: True - 获取成功并占用锁;False - 获取失败, 应选择关闭进程
- 返回类型
bool
示例
get_process_lock = RunTool.single_process_enter(“CFuntion”,”c:/test/”)
if not get_process_lock:
print(“已有一个进程在执行状态, 结束本进程”)
exit(1)
try:
do something …
finally:
RunTool.single_process_exit(“CFuntion”,”c:/test/”)
- static single_process_exit(process_name='', base_path='')[源代码]¶
结束进程锁控制:
1、结束单进程控制, 删除锁文件; 2、注意必须在程序执行完后一定要调用这个函数, 否则会导致一直锁住
- 参数
process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名
base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录
- static single_process_get_lockfile(process_name='', base_path='')[源代码]¶
获取进程锁处理锁文件路径
进程锁处理的辅助函数, 获取指定进程的锁文件名( 含路径)
- 参数
process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名
base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录
- 返回
锁文件名( 含路径)
- 返回类型
string
- static single_process_with(process_name='', base_path='', is_try_del_lockfile=False, logger=None, log_level=30, exit_code=1)[源代码]¶
单进程控制的with简单模式,封装with模式的调用方式来实现单进程控制
- 参数
process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名
base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录
is_try_del_lockfile (bool) – default=False, 是否尝试先删除锁文件( 可以应对强制关闭进程未自动删除锁文件的情况)
logger (object) –
default=None, 日志对象, 如果为None代表不需要输出日志, 传入对象需满足:
1、标准logging的logger对象
2、自定义的日志类对象, 但应实现warning、error等的标准方法
log_level (int) – default=logging.WARNING, 需要输出的自定义日志级别
exit_code (int) – default=1, 控制获取进程锁失败退出的错误码定义
示例
with RunTools.single_process_with():
# 以下为需要执行的程序逻辑
- class HiveNetCore.utils.run_tool.SafeEval[源代码]¶
基类:
object安全的Eval工具
- classmethod eval(source: str, globals_dict: Optional[dict] = None, locals_dict: Optional[dict] = None, forbid_import: bool = True, forbid_function: bool = False, forbid_modules: Optional[list] = None)[源代码]¶
安全的eval执行方法
- 参数
source (str) – 要执行的pyhton脚本
globals_dict (dict) –
default=None, 指定可以访问的全局变量, 如果不指定代表允许访问所有全局变量
例: {} - 禁止访问所有全局变量; {‘abc’: abc} - 指定只允许访问abc全局变量
locals_dict (dict) –
default=None, 指定可以访问的局部变量, 如果不指定代表允许访问所有局部变量
例: {} - 禁止访问所有局部变量; {‘abc’: abc} - 指定只允许访问abc局部变量
forbid_import (bool) – default=True, 是否禁止动态import模块
forbid_function (bool) – default=False, 是否禁止函数调用
forbid_modules (list) – default=None, 指定需要禁止使用的模块清单(黑名单)
- 返回
返回执行结果
- 返回类型
Any
- class HiveNetCore.utils.run_tool.WaitLockTool(lock, print_timeout: Optional[float] = None, label: str = '', print_acquire_ok: bool = False, print_release: bool = False, force_no_acquire: bool = False)[源代码]¶
基类:
object等待锁处理类
注: 便于输出锁长时间等待的问题, 跟踪死锁情况
- __init__(lock, print_timeout: Optional[float] = None, label: str = '', print_acquire_ok: bool = False, print_release: bool = False, force_no_acquire: bool = False)[源代码]¶
初始化简单锁处理类
- 参数
lock (<type>) – 锁对象
print_timeout (float) –
default=None, 等待超时打印时间, 单位为秒, 如果不设置代表不打印超时信息
注: 该参数仅为等待超时打印使用, 实际上锁还是会一直等待下去, 不会跳出等待处理
label (str) – default=’’, 打印信息时附带的显示内容
print_acquire_ok (bool) – default=False, 是否打印锁获取成功信息
print_release (bool) – default=False, 是否打印锁释放信息
force_no_acquire (bool) – default=Fasle, 是否强制不等待锁