import os
import logging
import time
from multiprocessing import Process
# ========增加代码--开始========
def produce_stop_bat(pid, tmpfile="stop_xxx.bat"):
'''
生成kill指定进程的脚本文件*.bat
:param pid:
:param tmpfile:
:return:
'''
# 待写入内容
stop_cmd = 'taskkill /pid ' + str(pid) + ' /f' # 关闭指定进程
del_self_cmd = "del %0" # 删除自身文件
# 文件路径和名称
tmp_all = "stop_" + tmpfile + ".bat"
# 写入文件
with open(file=tmp_all, mode="w") as f:
f.write(stop_cmd + "
" + del_self_cmd)
def getpid_for_kill():
'''
获取当前进程号PID,并生成kill当前进程的脚本文件*.bat
:return:
'''
# 进程号
pid = os.getpid()
# 本文件名(不含后缀.py)
myfilename = os.path.split(__file__)[-1].split(".")[0]
# 生成关闭进程的脚本文件
produce_stop_bat(pid, myfilename)
# ========增加代码--结束========
def do_log_activity(name):
'''
做日志生成活动
:return:
'''
# 如果日志文件夹不存在,则创建
log_dir = "log" # 日志存放文件夹名称
log_path = os.getcwd() + os.sep + log_dir
if not os.path.isdir(log_path):
os.makedirs(log_path)
# 设置logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
main_log_handler = logging.FileHandler(
log_dir + "/dd_%s.log" % time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime(time.time())), mode="w+",
encoding="utf-8")
main_log_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
main_log_handler.setFormatter(formatter)
logger.addHandler(main_log_handler)
# 控制台打印输出日志
console = logging.StreamHandler() # 定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console.setLevel(logging.INFO) # 设置要打印日志的等级,低于这一等级,不会打印
formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
# 循环生成日志信息
while True:
time_stamp = time.time()
# print("时间戳",time_stamp)
logger.info("时间戳 %s" % time_stamp)
logger.info('%s runing' % name)
sec = 3
logger.info("睡眠 %s 秒" % sec)
time.sleep(sec)
# 启动函数
def run(name):
# 获取当前进程号PID,并生成kill当前进程的脚本文件*.bat
getpid_for_kill()
# 启动日志生成活动
do_log_activity(name)
if __name__ == '__main__':
p1 = Process(target=run, args=("run_fun",), name="p1-进程")
p1.start()
# run()