OpenMediaVault-4.0.15执行更新(apt update)时报错“TypeError: 'NoneType' object is not callable”

OpenMediaVault-4.0.15执行更新(apt update)时报错,详细错误信息如下:

通过观察发现,只要从packages.openmediavault.org中下载文件失败,就会报告这个错误。

发生错误之后,重新执行

即可解决这个问题,或者忽略这个错误信息即可。

Python中用Ctrl+C终止threading初始化的多线程脚本

在编写Python脚本的时候,难免会遇到使用多线程操作的情况。

正常情况下,我们都习惯在Shell中使用Ctrl+C终止脚本的执行,但是在多线程环境中,我们发现Ctrl+C并不能有效终止开启了多线程的脚本。

由于Python提供的threading模块并没有提供线程的退出接口,导致我们没有办法终止已经正常运行的线程,尤其是线程被阻塞在内核的情况下。

解决这个问题的办法就是在线程初始化之后设置为守护模式(setDaemon),并且不要调用join阻塞主线程。这样当主线程退出的时候,其他线程也随之退出了。

下面是我们解决这种问题的一个例子:

参考链接


Python 中用 Ctrl+C 终止多线程程序的问题解决

ubuntu 14.04/ubuntu 17.10做主机双网卡共享上网(NAT)

需求是电脑通过无线上网,然后把有线共享给其他设备,其他设备通过电脑代理上网。

电脑上有两张网卡,一张有线网卡,名字为eth0,一张无线网卡,名字为wlan0

电脑的有线网卡配置的静态IP地址为:192.168.0.1

对于Ubuntu 16.10/17.10系统,请参考 Ubuntu 16.10/17.10无法通过/etc/rc.local开机启动应用 激活系统对于/etc/rc.local功能的支持。

电脑上执行如下命令:

此时,由于我们没有开启DHCP功能,因此只能设置静态IP地址。客户机设置如下:
eth0:192.168.0.10 掩码:255.255.255.0 网关:192.168.0.1

参考链接


ubuntu做主机双网卡共享上网方法

Python简单实现WebSocket

实现一个简单的聊天室程序,代码如下:

测试页面:

参考链接


python简单实现websocket

原生JS写Ajax的请求函数

一般我们写网页的时候,如果用到Ajax请求服务器,都是使用JQuery等已经封装好的库来调用,比较简单。

但是一般这些库的功能很多,引入了太多我们用不到的东西,如果我们需要写一个功能单一,简单的页面,完全用不到引用如此庞大的库文件。

我们可以简单实现一个自己的Ajax请求功能,具体的代码如下:

使用方法:GET

POST

这里需要注意一个问题,如果我们想要发送类似

URL,是不能通过上面的发送方式(字段填写在data参数中)发送的,上面的发送方式是属于表单的上传方式。

我们需要用下面的方式进行处理(自己拼凑URL

参考链接


树莓派2 B+任务栏(LXPanel)不断闪烁消失(RASPBIAN STRETCH WITH DESKTOP)

长时间不用的一个树莓派2 B+,使用的系统为RASPBIAN STRETCH WITH DESKTOP。在重新加电后,任务栏(LXPanel)不断闪烁消失,貌似启动的时候发生了异常,然后崩溃,重启,循环往复(并不是一直消失不见,而是不断闪烁)。但是查看系统日志,却找不到相关的异常日志。

这种现象,可以通过如下方法解决:

参考链接


树莓派3 B+下次启动强制检查系统分区

树莓派使用的过程中,难免会由于突然断电等原因导致SD卡发生错误。这个时候我们就需要强制让树莓派在下次启动的时候进行磁盘检查。

如果是普通分区,可以卸载后执行fsck命令,但是如果是系统分区,由于一直被占用,因此是没有办法进行磁盘检查的。

网上找了一下,找到了解决办法,可以强制让树莓派在下次系统启动的时候,强制检查系统分区。具体的方式如下:

参考链接


Checking sdcard for errors, unmount problem

树莓派3 B+设置静态IP

最近需要为一台树莓派3 B+设置静态IP地址,结果尝试了半天总是不成功。

网上搜索了一下,找到解决方法。

修改/etc/dhcpcd.conf文件

在文件的尾部增加如下内容:

上面的配置文件中,eth0是有线的配置, wlan0是无线配置
ip_address就是静态IP, 后面要接/24
routers是网关
domain_name_serversDNS

参考链接


设置树莓派3 B+的静态IP