0%

kubectl是Kubernetes集群管理器的命令行工具,使用kubectl可以在Kubernetes上部署和管理应用程序。 使用kubectl,可以检查集群资源;创建,删除和更新组件。

更多kubectl参考:https://kubernetes.io/docs/reference/kubectl/overview/

kubectl常用命令

查看集群信息

1
kubectl cluster-info

查看资源信息

1
2
3
kubectl get nodes       # 查看node信息
kubectl get pods # 查看pod信息
kubectl get rc,service # 同时查看rc和service信息
Read more »

本文原文地址:http://cenalulu.github.io/python/gil-in-python/

GIL是什么

首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。 就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。 有名的编译器例如GCC,INTEL C++,Visual C++等。 Python也一样,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行。 像其中的JPython就没有GIL。然而因为CPython是大部分环境下默认的Python执行环境。 所以在很多人的概念里CPython就是Python,也就想当然的把GIL归结为Python语言的缺陷。 所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL。

Read more »

年终岁尾,也没心思写代码了,后来想想,看看requests源代码吧~


setup.py

首先看这一段代码:

1
2
3
4
if sys.argv[-1] == 'publish':
os.system('python setup.py sdist bdist_wheel')
os.system('twine upload dist/*')
sys.exit()

当执行python setup.py publish时会自动编译并上传分发包, 咱们在编写分发包时可以参考这种写法,不过可以优化,我们只上传当前版本的分发包即可。

1
2
3
4
if sys.argv[-1] == 'publish':
os.system('python setup.py sdist bdist_wheel')
os.system('twine upload dist/*{}*'.format(about['__version__']))
sys.exit()

再看这一段代码:

1
2
3
about = {}
with open(os.path.join(here, 'requests', '__version__.py'), 'r', 'utf-8') as f:
exec(f.read(), about)

这段代码有两个写的好的地方:

  1. 将一些公共配置信息放到了requests/__version__.py文件中;
  2. 在执行setup.py时不会引入不必要module。
Read more »

WITH语句块用于使用上下文管理器定义的方法。语法结构如下:

1
2
with_stmt ::=  "with" with_item ("," with_item)* ":" suite
with_item ::= expression ["as" target]

我们经常会用到文件读写:

1
2
3
f = open("a.txt", "r")
f.read()
f.close()

使用with语句块可以这么写:

1
2
with open("a.txt", "r") as f:
f.read()
Read more »

使用Google’s Tesseract-OCR Engine来做验证码识别。

安装Tesseract

参考Install Tesseract via pre-built binary package安装Tesseract。

识别验证码

识别验证码可以按照以下步骤进行:

  1. 处理验证码图片
    1. 去掉背景,有些验证码背景是纯色背景,这样的验证码我们可以先去掉背景色
    2. 去噪/干扰线,去掉噪点以及干扰线,有些干扰线是1像素宽度,这样可以使用去噪点的方式去除干扰线
    3. 二值化,将图片做二值化处理
    4. 图片切割,将图片切分成单个字符的小图片,也可不切割
  2. 识别验证码
Read more »

使用Google’s Tesseract-OCR Engine来识别图片。

安装

安装Tesseract

参考Install Tesseract via pre-built binary package安装Tesseract。

安装pytesseract

直接使用pip命令安装:

1
pip install pytesseract

Quickstart

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
try:
from PIL import Image
except ImportError:
import Image
import pytesseract

# If you don't have tesseract executable in your PATH, include the following:
pytesseract.pytesseract.tesseract_cmd = r'<full_path_to_your_tesseract_executable>'
# Example tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract'

# Simple image to string
print(pytesseract.image_to_string(Image.open('test.png')))

# French text image to string
print(pytesseract.image_to_string(Image.open('test-european.jpg'), lang='fra'))

# Get bounding box estimates
print(pytesseract.image_to_boxes(Image.open('test.png')))

# Get verbose data including boxes, confidences, line and page numbers
print(pytesseract.image_to_data(Image.open('test.png')))

# Get information about orientation and script detection
print(pytesseract.image_to_osd(Image.open('test.png')))

# In order to bypass the internal image conversions, just use relative or absolute image path
# NOTE: If you don't use supported images, tesseract will return error
print(pytesseract.image_to_string('test.png'))

# get a searchable PDF
pdf = pytesseract.image_to_pdf_or_hocr('test.png', extension='pdf')

# get HOCR output
hocr = pytesseract.image_to_pdf_or_hocr('test.png', extension='hocr')

昨天有个Python初学者问了一个问题:

1
2
def test(a, b, c): pass
# 怎么用一个元组作为参数直接传递给test函数?

这里用到了一个解包的概念,可以直接使用test(*(1, 2, 3))

解包可迭代对象

在Python中,可迭代对象都可以解包,如str、list、tuple、set、生成器、迭代器…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> a0, a1, *args, a_1 = "Hello world!"     # 解包str
>>> a0
'H'
>>> a_1
'!'
>>> a0, a1, *args, a_1 = [0, 1, 2, 3, 4, 5] # 解包list
>>> a0
0
>>> a_1
5
>>> a0, a1, *args, a_1 = range(10) # 解包生成器
>>> a0
1
>>> a_1
9
>>> a0, a1, (a2_0, a2_1, *a2_args), *args = ["0", "a", (0, 1, 2, 3, 4)] # 双重解包
>>> a0
'0'
>>> a1
'a'
>>> a2_0
0
>>> a2_args
[2, 3, 4]
Read more »

编写命令行工具

创建一个项目

直接使用npm init初始化一个项目,package.json文件内容如下:

1
2
3
4
5
6
7
8
9
10
{
"name": "nb-cli",
"version": "1.0.0",
"description": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}

创建可执行程序

创建文件bin/nb-cli,内容如下:

1
2
3
4
5
#!/usr/bin/env node
'use strict';

console.log('cli');
console.log(process.argv);
Read more »

Python标准库中自带了一个argparse模块,这个模块用来解析命令行参数。 当然,python还自带了另外两个库用来实现同样的功能:getoptoptparse

基本用法

一个最简单的例子如下:

1
2
3
4
# prog.py
import argparse
parser = argparse.ArgumentParser()
parser.parse_args() # 解析参数

执行这段代码,结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h]

optional arguments:
-h, --help show this help message and exit
$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
Read more »