pyinstaller黑色窗口一闪而过怎么去掉

2018年10月14日 08:32

默认情况下pyinstaller编译出的exe有cmd窗口。给它设置了-w选项,可以把它去掉。
为什么我加了,还是会出现一闪而过的黑色窗口
 

加上-w选项

 
python -m PyInstaller xxx.py -w
 

不要用os.system

 
os.system("xxx")  #会调用cmd.exe,所以会出现黑色窗口

#改用subprocess,不会出现黑色窗口
subprocess.Popen("xxx", close_fds=True)
 
《了凡四训》详解之改过之法
印光大师十念法(胡小林主讲第1集)
《寿康宝鉴》有声书

 

评论(0) 阅读(141)

pyinstaller编译出的exe被杀毒软件认为是木马

2018年10月14日 08:15

把python文件转为独立的exe,放在windows上运行。结果腾讯管家马上提示有可能是木马把它删除了
 
一脸懵逼,我良民,咋成木马了呢。思前想后,我做了什么,被认为很危险。原来我用了os.system。下面是演示
 

python文件

#xxx.py
import os
cmd="xxxxx"
os.system(cmd)
 

编译exe

#编译完成,系统提示发现木马
python -m PyInstaller xxx.py --onefile
 

解决方法

 
改用subprocess替代os.system
 
subprocess.Popen(cmd, close_fds=True)
 

为什么用了subprocess就没事了?

 
os.sytem属于独立进程间调用。subprocess外壳还是python属于内部进程。
 
 
《了凡四训》详解之改过之法
印光大师十念法(胡小林主讲第1集)
印光大师十念法(胡小林主讲第2集)
印光大师十念法(胡小林主讲第3集)
 
 

Tags: pyinstaller
评论(0) 阅读(197)

pelican AttributeError: 'unicode' object has no attribute 'slug'

2018年7月08日 16:06

pelican生成html报错,原因是网上的教程有错误。pelican默认支持rst格式,创建md格式文章,根本没有编译,所以网上教程不会报错
 
如果支持markdown需要安装”pip install markdown”。安装之后编译出现如下错误。
 
(pelican) ➜  xuefo make html
pelican /home/wyq/me/workspace/xuefo/content -o /home/wyq/me/workspace/xuefo/output -s /home/wyq/me/workspace/xuefo/pelicanconf.py 
CRITICAL: AttributeError: 'unicode' object has no attribute 'slug'
make: *** [Makefile:65:html] 错误 1
 
错误方式
Title: 文章标题
Date: 2018-07-07
Category: 文章类别
Tag: 标签1, 标签2       #此处错误
 
正确方式
Tags: 标签1,标签2
 
《了凡四训》详解之改过之法
印光大师十念法(胡小林主讲第1集)

 

评论(0) 阅读(643)

如何判断类是类

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) 阅读(568)

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
评论(1) 阅读(774)

pycharm回车符问题

2018年6月24日 07:31

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

 

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

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) 阅读(840)

python3.6编码错误unable to load the file system codec

2018年6月02日 20:09

  • 情况描述
在windows中安装python、virtualenv后,启动cmd界面,使用virtualenv创建运行环境出现错误,意思是加载不了系统编码
 
c:\python36\Scripts\virtualenv.exe test
Fatal Python error: Py_Initialize: unable to load the file system codec
  • 解决办法
将cmd编码改为utf-8
chcp 65001
 

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

zfill自动补0

2018年5月19日 17:14

python提供了zfill(zero fill)函数自动为字符串前面补0
>>> "5".zfill(2)  #2表示字符串宽度
'05'
 
《寿康宝鉴》有声书

 

评论(0) 阅读(552)

python常见编码错误集合

2018年5月17日 11:08

  • 错误1:变量加载到内存出现编码错误
文件内容
a="中国"
print a

#报错
➜  ~ python a.py
  File "a.py", line 1
SyntaxError: Non-ASCII character '\xe4' in file b.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
编译会读取变量a存到内存,因为包含中文,转化为str(ascii默认编码)报错
磁盘字节串utf-8-->无法转为内存字节串str(ascii)
 
  • 错误2:str直接encode报错
>>> sys.getdefaultencoding()
'ascii'
>>> a="中国"
>>> a.encode("gbk")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
>>> b=u"中国"
>>> b.encode("gbk")
'\xd6\xd0\xb9\xfa'
变量a的类型是str(utf-8字节串),会自动调用decode(默认编码ascii),转为unicode,再调encode
按照默认编码去decode变量utf-8编码字节串会报错
 
 
  • 错误3:编码相互转换报错
>>> "中国".decode("utf-8").encode("ascii")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> "中国".decode("utf-8").encode("gbk")
'\xd6\xd0\xb9\xfa'
>>> "a".decode("utf-8").encode("ascii")
'a'
 
ascii是utf-8的子集合,小集合转换大集合没有问题
大集合转为小集合就报错不支持
 
  • unicode不能再decode
>>> a = "中国"
>>> b = a.decode("utf-8")
>>> b
u'\u4e2d\u56fd'
>>> b.decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
 
  • 总结
理解编码错误时,首先要判断str时以什么编码存放在内存中的,然后判断是否符合转换公式(str-(decode)->unicode-(encode)->str)。
判断方法,在python2中用len(str)或者bytes(str)可以判断,中文utf-8占3个字节,gbk占2个字节,ascii占一个字节。
 
印光大师十念法(胡小林主讲第1集)
此生必看的科学实验-水知道答案

 

评论(0) 阅读(349)