如何判断类是类

2018年6月29日 07:29

在写动态加载时,通常需要过滤出需要的类。如何从模块中过滤出其中的类呢?

  • 判断a是类A的实例
isinstance(a, A)
  • 判断B类是A的子类
issubclass(B, A)
  • 判断A是一个类
isinstance(A, type) 
  • 判断B是类并且是A的子类
isinstance(B, type) and issubclass(B, A)
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)
 

评论(0) 阅读(680)

TypeError: Unicode-objects must be encoded before hashing

2018年6月29日 07:16

python3中md5加密报错

>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update("123")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Unicode-objects must be encoded before hashing

正确方式

unicode对象不能直接加密

md5.update("123".encode("utf-8"))
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)

 

Tags: python3
评论(0) 阅读(1134)

pycharm回车符问题

2018年6月24日 07:31

pycharm如何防止windows回车符呢?
 
pycharm新建项目之后,默认不会对回车符有任何处理。键盘回车、粘贴都会产生windows回车符.
 
  • 解决办法
1.选中项目根节点
2.File-->Line Separators-->LF Unix
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)

 

Tags: pycharm
评论(0) 阅读(693)

sqlite3.OperationalError: database is locked

2018年6月24日 07:12

  • 情景描述
windows上的代码文件,设置为共享目录,mount到linux使用。运行python manage.py migrate命令,出现错误
 
  • 报错
[root@localhost sqlalchemy]# python manage.py db migrate
/root/py_env/coacs/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Traceback (most recent call last):
  File "/root/py_env/coacs/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
    context)
  File "/root/py_env/coacs/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 508, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked
 
  • 原因
sqlite3与smb的lock冲突
 
  • 解决
sudo mount -t cifs //192.168.10.12/coacs /opt/coacs -o username=wyq,password=sprite,vers=1.0,nobrl
 
nobrl 表示不向服务器发送对 byte range lock 的请求。
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)

 

评论(0) 阅读(1140)

python中如何防止sql注入

2018年6月10日 08:37

python访问数据库的底层库很多,以pymysql为例, 它在执行sql前,会对sql中的特殊字符进行转义,如
 
  • 字符转义
def escape_string(value, mapping=None):
    """escape_string escapes *value* but not surround it with quotes.

    Value should be bytes or unicode.
    """
    if isinstance(value, unicode):
        return _escape_unicode(value)
    assert isinstance(value, (bytes, bytearray))
    value = value.replace('\\', '\\\\')
    value = value.replace('\0', '\\0')
    value = value.replace('\n', '\\n')
    value = value.replace('\r', '\\r')
    value = value.replace('\032', '\\Z')
    value = value.replace("'", "\\'")
    value = value.replace('"', '\\"')
    return value
 
  • 执行sql的正确方法,不要在sql中拼接参数,字符转义只会针对参数args
# query作为sql模板,args为将要传入的参数
execute(query, args=None)
 
  • django/sqlalchemy
orm框架都是使用pymysql/MySQL-python等库,并且都使用execute(query,args)调用,将sql与参数分开传入。
 
  • sql注入检测工具
sqlmap
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)
 

Tags: db
评论(0) 阅读(1105)

docker容器中不能ping

2018年6月10日 06:40

  • 描述
进入容器内,执行ping命令,提示缺少权限
docker exec -it deac /bin/bash
bash-4.3$ ping 192.168.1.100
PING 192.168.1.100 (192.168.10.100): 56 data bytes
ping: permission denied (are you root?)
 
  • 首先,查看当前用户
bash-4.3$ whoami
jenkins
 
  • 然后,再看看文件权限
缺少权限创建socket
# 查看ping权限
bash-4.3# ls -lsh /bin/ping
0 lrwxrwxrwx 1 root root 12 May  9  2017 /bin/ping -> /bin/busybox

#查看ping连接文件的权限
bash-4.3$ ls -lhs /bin/busybox
804K -rwr-xr-x 1 root root 803K Oct 26  2016 /bin/busybox
 
  • 方法一,临时方式,以root用户登录
docker exec -u root -it deac /bin/bash
 
  • 方法二,永久,添加s权限
#添加权限
chmod u+s /bin/ping  # 让用户在执行ping时,暂时拥有权限

#再查看权限
bash-4.3$ ls -lsh /bin/busybox
804K -rwsr-xr-x 1 root root 803K Oct 26  2016 /bin/busybox
 
此生必看的科学实验-水知道答案

 

评论(0) 阅读(1378)

docker缩小镜像大小的六种方法

2018年6月03日 10:55

1.选择apline作为基础镜像

2.合并dockerfile中RUN命令

3.安装软件后,删掉源文件

4.导出的文件用gzip命令压缩

5.save命令多个镜像一起导出,缩小整体大小

6.多段构建
 
珍惜生命请勿杀害动物 01

 

评论(0) 阅读(932)

docker基础镜像怎么选?

2018年6月03日 10:40

先看看基础镜像的dockerfile,它们是怎么创建出来的。
  • scratch
空镜像
  • alpine
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
  • debian
FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]
  • centos/fedora/ubuntu
FROM scratch
ADD centos-7.4.1708-docker.tar.xz /

LABEL name="CentOS Base Image" \
    vendor="CentOS" \
    license="GPLv2" \
    build-date="20170911"

CMD ["/bin/bash"]
  • 建议
docker是容器不同于虚拟机,运行之后只有应用程序在里面运行,基础镜像只是为应用程序提供依赖包。应用程序是主,基础镜像是次。
如果没有必要,选择最小的依赖环境alpine,然后在这个基础上制作自己的镜像。
 
 
珍惜生命请勿杀害动物 01
珍惜生命请勿杀害动物 02
珍惜生命请勿杀害动物 03

 

评论(0) 阅读(905)

docker search怎么查详情

2018年6月03日 09:09

刚用docker search的人,看到查出一堆结果,此时会有两个疑问
 
1. 如何查详情?
答案是没有,docker没有查看详情的命令
 
2. 结果太多,哪个是最好的,该选哪个?
可以简单认为官方是最好的,热度高的是最好的。
 
* 显示官方
docker search [包名]  --filter "is-official=true"
* 过滤热度
docker search [包名] --stars=3
 
3. 建议
docker search真不实用,不如到官方网站查(http://hub.docker.com),上面有最详细的信息。得出结论后再docker pull到本地使用。
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)

 

评论(0) 阅读(777)

查看每个cpu核使用情况

2018年6月03日 00:12

  • 运行top命令,然后按1
Tasks: 226 total,   1 running, 225 sleeping,   0 stopped,   0 zombie
%Cpu0  : 33.3 us, 47.8 sy,  0.0 ni, 11.9 id,  0.0 wa,  5.9 hi,  1.1 si,  0.0 st
%Cpu1  : 33.1 us, 48.5 sy,  0.0 ni, 11.8 id,  0.0 wa,  6.2 hi,  0.4 si,  0.0 st
KiB Mem :  4024788 total,   862968 free,  1832492 used,  1329328 buff/cache
KiB Swap:  4157436 total,  4157436 free,        0 used.  1849656 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                
  4882 root      20   0  955352 355904   4548 S 163.0  8.8   2:20.43 python                                                                                 
   717 root      20   0  243524  11020   9736 S   0.3  0.3   0:20.52 vmtoolsd  
 
淨空法師:如何看待赌博与怎样戒赌

 

 

评论(0) 阅读(486)