2020年6月

先扔参考文链接

windows直接上传带文件名带中文的文件到linux, linux 系统的字符编码默认是utf-8。
文件名的中文部分会显示乱码,且在把文件名 print 出来时 一定概率会触发 一个 UnicodeEncodeError 异常 提示 surrogates not allowed

def bad_filename(filename):
    return repr(filename)[1:-1]

try:
    print(filename)
except UnicodeEncodeError:
    print(bad_filename(filename))

对异常文件处理可以根据自己需要制定策略,例如 os.rename 过滤掉汉字部分,或 更彻底用 uuid.uuid1() 赋予新文件名。

先声明,这不是教学也没有自称是最正统王道的做法。只是适用于我当前项目的情况。

背景:一个后台的守护进程,会对导入的批量文件进行轮询及列队处理。
这些目标文件可能有各种预期外的格式、数据类型不正确导致py崩溃中途退出。造成了队列堵塞

当发现堵塞时,手动去运行脚本可以查看到有问题的关键文件。但想找个办法让遇到问题是能跳过不阻塞队列,但保留错误信息到日志以便追查处理。

以下是我的处理办法。核心是用 try/exceptionlogging 捕获异常写入自定义日志文件。

import logging

# 设置输出错误日志
logging.basicConfig(filename='pyerr.log', filemode='w')

# 扫描待处理的目录,查找 docx文件
filelist = os.listdir(scan_path)

for dfile in filelist:
    if dfile[-5:].lower() == ".docx":
        try:
            imp_result = mod_doc.import_db(scan_path+dfile) #这步是容易出现异常的导入复杂操作
            # 导出处理结果的业务逻辑 略

        except: #把异常写入日志文件
            s = traceback.format_exc()
            logging.error(dfile+'\n'+s)

    else:
        print("non docx file, skip:"+dfile)

仅作备忘,有关异常处理和日志处理的用法这里不展开说明。

业务逻辑中处理完毕的文档会被转移归档保存,所以剩下在目录里的则是异常的文件。
如想避免异常文件每轮的轮询仍被执行, 可以转移到特定文件夹并修改 logging.basicConfig 的 filemode 改为 'a' 使多个异常文档的错误信息不会被覆盖。

接连处理了微软坑爹的windows补丁、意外而来的流氓软件。蓝屏问题解决了,但显卡驱动崩了的状况还是接二连三。

QQ截图20200606233155.jpg

怀疑是不是还有其他补丁的冲突问题,更新最新驱动 和 还原远古驱动,问题依旧。

QQ截图20200606233440.jpg

一筹莫展之时发现显卡到了70°C 就会崩,心都吓凉了不会是硬件问题吧...拆机检查,风扇竟然一直不转!

网友给了线索如果用微星的显卡超频工具(小飞机)调整过风扇转速有可能会导致驱动升级后风扇不转!!!

QQ截图20200606233801.jpg

一经测试果真如此,重新设置自定义转速后温度压下来了,满载57°C !没有再出现驱动崩溃的状况
(准确的说可能是因为温度骤升GPU自我保护直接罢工)

所以一切都是后台更新驱动的锅吗...

演示地址: https://gen8.orz.com.cn/beta/bg180/

应需求方的要求,在页面增加一些动态元素增加引导交互效果。

关键在于 CSS的animation(keyframes) 和 background-position 两个属性组合

animation: anibg 13s ease-in-out infinite;

……

@keyframes anibg {
    0% {background-position: left center;}
    50% {background-position: right center;}
    100% {background-position: left center;}
}