Dust8 的博客

读书百遍其义自见

0%

warnings

今天在 requests 的源代码里面看到下面的写法

1
2
3
4
5
import warnings

# urllib3's DependencyWarnings should be silenced.
from .packages.urllib3.exceptions import DependencyWarning
warnings.simplefilter('ignore', DependencyWarning)

warnings 是标准库里面的, 通过过滤器可以忽略警告.

当我用 requests 请求 https 时总是报 InsecureRequestWarning 错误,现在就可以这样处理了.

1
2
3
4
5
import warnings

from requests.packages.urllib3.exceptions import InsecureRequestWarning

warnings.simplefilter('ignore', InsecureRequestWarning)

问题

由于写的爬虫需要运行好几个相同的实例,并且运行的文件规定为 main.py,导致运行起来后都分不清谁是谁了.

写 bat 命令来标示

同事告诉我的,我又修改了下,代码如下,保存为 main.bat 就好了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off

echo 设置自定义标题用来区分不同的运行实例, 运行的文件名默认为 main.py, 目录为运行的 bat 文件目录

set default_title=test
set dafault_title_prefix=spider
set default_filename=main.py
set default_path=%~dp0
set default_cmd=python

title %dafault_title_prefix%-%default_title%
set fullname=%default_path%%default_filename%
set run_cmd=%default_cmd% %fullname%

echo 运行命令为: %run_cmd%

Rem 运行命令
%run_cmd%

pause

main.bat

备注:

  • 等号前后不要有空格
  • 加个暂停可以防止出错后窗口关闭后看不到出错信息

问题: Boot Camp 助手 里面提升 “找不到安装器光盘”

2010款的只支持到 windows7,并且默认只支持光盘安装.
所以需要修改系统配置,使他支持 u 盘安装.

应用程序 => 实用工具 => Boot Camp 助理,右键 => 显示包内容 => 打开Contents文件夹, 找到 Info.plist 文件.复制到桌面,多复制几个.
把其中一个的后缀改为 txt 文件,在修改里面的文件内容.

  1. 在 DARequiredROMVersions 字段添加 Boot ROM 版本号
  2. 在 PreUSBBootSupportedModels 字段添加型号标识符
  3. 修改 PreUSBBootSupportedModels 为 USBBootSupportedModels,保存并替换回原位
  4. 打开终端,输入 sudo codesign -fs - /Applications/Utilities/Boot\ Camp\ Assistant.app/, 输入密码,完成

现在再打开 Boot Camp就可以了 ,如果没有第 4 步 打开会报错的.

问题: 分不了区

开机按住 command+s, 等到可以输入命令后, 输入 fsck -fy ,
等它执行完毕, 然后输入 reboot 重启就好了.

起因

无聊看到 《python3 cookbook》 里面的 “读取嵌套和可变长二进制数据” 又感受到了
不会学习。这本书很久很久之前就知道也翻过,就是没仔细看。
后来解析协议,解析二进制文件(比如字体文件woff2)都没想到好的方法,只会文章里面的不怎么方便的方法。
古人诚不欺我,读书百遍,其义自见(xian)。我最近也在清理以前保存的书签,也发现很多以前没注意到却很有用的东西。

解析 gif 头部

gif 协议:https://www.w3.org/Graphics/GIF/spec-gif89a.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import struct


class StructField:
def __init__(self, format_str, offset):
self.format_str = format_str
self.offset = offset

def __get__(self, instance, cls):
if instance is None:
return self
else:
r = struct.unpack_from(self.format_str, instance._buffer,
self.offset)
return r[0] if len(r) == 1 else r


class StructureMeta(type):
def __init__(self, clsname, bases, clsdict):
fields = getattr(self, '_fields_', [])
byte_order = ''
offset = 0
for format_str, fieldname in fields:
if format_str.startswith(('<', '>', '!', '@')):
# 这里我开始以为没有用,其实是用来缓存字节序的
byte_order = format_str[0]
format_str = format_str[1:]
format_str = byte_order + format_str
setattr(self, fieldname, StructField(format_str, offset))
offset += struct.calcsize(format_str)
setattr(self, 'struct_size', offset)


class Structure(metaclass=StructureMeta):
def __init__(self, bytedata):
self._buffer = bytedata

@classmethod
def from_file(cls, fh):
return cls(fh.read(cls.struct_size))


class GifHeader(Structure):
'''https://www.w3.org/Graphics/GIF/spec-gif89a.txt'''
_fields_ = [('3s', 'signature'), ('3s', 'version')]


if __name__ == '__main__':
with open('bin.gif', 'rb') as fh:
gif_header = GifHeader.from_file(fh)
print('signature: ', gif_header.signature.decode()) # signature: GIF
print('version: ', gif_header.version.decode()) # version: 89a


title: sentry 试用
date: 2018-02-22 05:15:31
tags:
—## sentry 简介

官网: https://sentry.io
sentry 是一个错误跟踪系统。可以用来记录错误日志,但不能用来替代日志,因为它主打的是跟踪错误。

本地安装

官方有很好的 sass 服务,但是我选本地安装。本地也有 2 种:python 和 docker。当然用官方推荐的 docker。

去 github 上克隆 getsentry/onpremise 下来,
要安装 github 上的来安装,不要按照 sentry 文档上的来安装,会简单很多。

docker 换 中国科学技术大学 的开源镜像会快很多:
https://docker.mirrors.ustc.edu.cn

使用

浏览器打开 localhost:9000 就可以用了。

浏览器打开不了里面的某些链接

看浏览器的 url 地址栏就发现问题了:
http://localhost:9000/organizations/sentry/members/127.0.0.1/organizations/sentry/rate-limits/

这是相对路径不对。

raven 里面的 dsn 填什么

浏览器里面给的是:
://168b3dd55f7c47919b511d0ae5efe5f1:135f030ae86b458aa19646176f5e7a7a@127.0.0.1/
2

前面要加 http, ip 地址后面要加端口号。