2019独角兽企业重金招聘Python工程师标准>>>

Python过程型程序设计快速入门

核心数据类型:

基本数据类型:数字、字符串

数字

整形:整数、布尔数

浮点型

字符型

组合数据类型:

序列:

列表:list

元组:tuple

字符串:string

字典:

可变类型,dict

集合

set

表达式:“某事”

由一个或多个操作数,以及0个或多个以上的运行符组成,可以通过计算得到一个值,对象,方法或名称空间;

表达式的操作符:in, not, in,is,is not

< ,> , == , !=

+,-,*,/,%,**

li[i]

x.method()

x.attr

(…)

[…]

{…}

语句:做“某事”

声明变量、赋值、方法调用、循环访问集合、选择分支;

语句在程序中的执行顺序称为“控制流”,或“执行流”

if , while ,for , try

def, pass, class, return

break, continue

from, import

变量名的命名法则:

只能包含字母、数字和下划线,且不能以数字开头;

区分大小写;禁止使用保留字;

程序结构与控制流:

Python的布尔测试:

(1)任何的非零数字或非空对象都为真”true”

(2)数字零,空对象以及特殊对象None都为“False”

(3)比较和相等测试会递归的应用在数据结构;会返回“True”或“False”

(4)and 和 or,运算符会返回“真”或“假”的操作对象

选择执行

if CONDITION:

suite

if CONDITION:

suite1

else:

suite2

if CONDITION1:

suite1

elif CONDITION2:

suite2

...

else:

suiten

>>> num = 0

>>> if num:

print("Condition is True")

>>> num = 1

>>> if num:

print("Condition is True")

Condition is True

if/else的三元表达式:

expression1 if CONDITION else expression2

循环执行:

while,for

while BOOLEAN_EXPRESSION:

while_suite

while BOOLEAN_EXPRESSION:

while_suite

else:

else_suite

运行到while,即测试其后的条件;为“True”时,则执行一遍循环体,结束之后再运行BOOLEAN_EXPRESSION;

else为可选;

for expression in iterable:

for_suite

else:

else_suite

else也是可选的

控制:

continue

break

前面的都是Windows下的 Python shell

列表解析:Python迭代机制的一种应用,用于实现创建新列表;

[expression for iter_var in iterable_object]

[expression for iter_var in iterable_object if condition]

In [29]: [i ** 2 for i in li if i != 6]

Out[29]: [1, 4, 9, 16, 25, 49, 64]

Python缩进非常重要,4个空白

In [31]: m = 35

文件系统和文件

文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构--即在磁盘上组织文件的方法

计算机文件(或称文件、电脑档案、档案),是存储在某种长期存储设备或临时存储设备中的一段数据流,并且归属于计算机文件系统管理之下

概括来讲

文件是计算机中由OS管理的具有名字的存储区域

在Linux系统上,文件被看做是字节序列

Python内置函数open()用于打开文件和创建文件对象

open(name[,mode[,bufsize]])

open方法可以接收三个参数:文件名、模式和缓冲区参数

open函数返回的是一个文件对象

mode:指定文件的打开模式

bufsize:定义输出缓存

0表示无输出缓存

1表示使用缓冲

负数表示使用系统默认设置

证书表示使用近似指定大小的缓冲

文件的打开模式

简单模式

r:只读

open(”/var/log/message.log”,’r’)

w:写入

a:附加

在模式后使用“+”表示同时支持输入、输出操作

如r+, w+和a+

在模式后附加”b”表示以二进制方式打开

如rb,wb++

文件的方法

Python的函数

函数的基础概念

函数是Python为了代码最大程度地重用和最小代码冗余而提供的基本程序结构

函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件

函数用于将相关功能打包并参数化

在Python中可以创建4种函数:

全局函数:定义在模块中

局部函数:嵌套于其他函数中

lambda函数:表达式

方法:与特定数据类型关联的函数,并且只能与数据类型关联一起使用

Python提供了很多内置函数

语法

def functionName(parameters)

suite

一些相关的概念

def是一个可执行语句

因此可以出现在任何能够使用语句的地方,甚至可以嵌套于其他语句,例如if或while中

def创建一个对象并将其赋值给一个变量名(即函数名)

return用于返回结果对象,其为可选;无return语句的函数自动返回None对象

返回多个值时,彼此间使用逗号分隔,且组合为元组形式返回一个对象

def语句运行之后,可以在程序中通过函数后附加括号进行调用

函数的定义方式:

def functionName(arg1,arg2,...):

function_suite

创建函数对象,并将其赋值给一个变量名(函数名)

return ,None

变量名解析:LEGB原则

变量名引用分三个作用域进行:首先是本地、之后是函数内、接着是全局,最后是内置;

Python模块

可以将代码量较大的程序分隔成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块

模块在物理形式上表现为以.py结尾的代码文件

一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件

模块的文件名就是模块的名字加上扩展名.py

每个模块都有自己的名称空间

Python允许“导入”其它模块以实现代码重用,从而实现了将独立的代码文件组织成更大的程序系统

Python中,模块也是对象

在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性

Python程序架构

一个Python程序通常包括一个顶层程序文件和其他的模块文件(0个、1个或多个)

顶层文件:包含了程序的主要控制流程

模块文件: 为顶层文件或其他模块提供各种功能性组件

模块首次导入(或重载)时,Python会立即执行模块文件的顶层程序代码(不在函数内的代码),而位于函数主体内的代码直到函数被调用后才会执行

模块的执行环境

模块是被导入的,但模块也可以导入和使用其他模块,这些模块可以用Python或其他编程语言写成

模块可内含变量、函数以及类来进行其工作,而函数和类可以包含变量和其它元素

模块:

程序文件:mod_name.py

import mod_name

模块中的顶层代码会被执行;模块会引入新的名称空间;

mod_name.

导入模块

在导入模块时只能使用模块名,而不能使用带.py后缀的模块文件名

import语句

导入指定的整个模块,包括生成一个以模块名命名的名称空间

import module1[,module2[,…moduleN]]

建议一个import语句只导入一个模块

import module as module_alias

from import语句

常用于只导入指定模块的部分属性至当前名称空间

from module import name1[,name2[,…nameN]]

import工作机制

import语句导入指定的模块时会执行三个步骤

找到模块文件

在指定的路径下搜索模块文件

编译成字节码

文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件

执行模块的代码来创建其所定义的对象

模块文件中的所有语句会一次执行,从头至尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性

注意:模块只在第一次导入时才会执行如上步骤:

后续的导入操作只不过是提取内存中已加载的模块对象

reload()可用于重新加载模块

模块搜索

Python解释器在import模块时必须先找到对应的模块文件

程序的主目录

PYTHONPATH目录(如果设置了此变量)

标准链接库目录

任何.pth文件的内容(如果存在.pth文件)

这四个组件组合起来即为sys.path所包含的路径,而Python会选择在搜索路径中的第一个符合导入文件的文件

>>> import sys
>>> sys.path
['', '/root/.pyenv/versions/3.4.2/lib/python34.zip', '/root/.pyenv/versions/3.4.2/lib/python3.4', '/root/.pyenv/versions/3.4.2/lib/python3.4/plat-linux', '/root/.pyenv/versions/3.4.2/lib/python3.4/lib-dynload', '/root/.pyenv/versions/3.4.2/lib/python3.4/site-packages', '/root/.pyenv/versions/3.4.2/lib/python3.4/site-packages/IPython/extensions']

Python类与面向对象

面向对象编程(OOP)

面向对象的核心概念

所有编程语言的最终目的都是提供一种抽象方法

在机器模型(“解空间”或“方案空间”)与实际解决的问题模型(“问题空间”)之间,程序员必须建立一种联系

面向过程:程序 = 算法 + 数据结构

面向对象:将问题空间中的元素以及它们在解空间中的表示抽象为对象,并允许通过问题来描述问题而不是方案

可以把实例想象成一种新型变量,它保存着数据,但可以对自身的数据执行操作

类型由状态集合(数据)和转换这些状态的操作集合组成

类抽象

类:定义了被多个同一类型对象共享的结构和行为(数据和代码)

类的数据和代码:即类的成员

数据:成员变量或实例变量

成员方法:简称为方法,是操作数据的代码,用于定义如何使用成员变量;因此一个类的行为和接口是通过方法来定义的

方法和变量:

私有:内部使用

公共:外部可用

面向对象的程序设计

所有东西都是对象

程序是一大堆对象的组合

通过消息传递,各对象知道自己该做什么

消息:即调用请求,它调用的是从属于目标对象的一个方法

每个对象都有自己的存储空间,并可容纳其他对象

通过封装现有对象,可以制作成新型对象

每个对象都属于某一类型

类型,也即类

对象是类的实例

类的一个重要特性为“能发什么样的消息给它”

同一个类的所有对象都能接收相同的消息

对象接口

定义一个类后,可以根据需要实例化出多个对象

如何利用对象完成真正有用的工作?

必须有一种办法能向对象发出请求,令其做一些事情

每个对象仅能接收特定的请求

能向对象发送的请求由其“接口”进行定义

对象的“类型”或“类”则规定了它的接口形式

类间关系

依赖(“uses  a”)

一个类的方法操纵另一个类的对象

聚合(“has  a”)

类A的对象包含类B的对象

继承(“is a”)

描述特殊与一般关系

面向对象编程的原则

面向对象的模型机制有3个原则:封装、继承、多态

封装(encapsulation)

隐藏实现方案细节

将代码及其处理的数据绑定在一起的一种编程机制,用于保证程序和数据不受外部干扰且不会被误用

多态性

允许一个接口被多个通用的类动作使用的特性,具体使用哪个动作与应用场合相关

“一个接口,多个方法”

用于为一组相关的动作设计一个通用的接口,以降低程序复杂性

Python类和实例

类是一种数据结构,可用于创建实例

一般情况下,类封装了数据和可用于改数据的方法

Python类是一个可调用对象,即类对象

Python2.2之后,类是一种自定义类型,而实例则是声明某个自定义类型的变量

实例初始化

通过调用类来创建实例

instance = ClassName(args..)

类在实例化时可以使用__init__的__del__两个特殊方法

Python中创建类

类 :

class ClassName():

class_suite

例子

class语句内,任何赋值语句都会创建类属性

一般,方法的第一个参数被命名为self,这仅仅是一个约定:对Python而言,名称self绝对没有任何特殊含义。(但是请注意:如果不遵循这个约定,对其他Python程序员而言你的代码可读性就会变差,而且有些类查看器程序也可能是遵循此约定编写的。)

每个实例对象都会继承类的属性并获得自己的名称空间

In [5]: class FirstClass:

name = "tom"

def show(self):

print(self.name)

...:

In [6]: a = FirstClass()

In [7]: a.name

Out[7]: 'tom'

In [8]: a.show()

tom

异常:

运行时错误:

try:

try_suite

except Exception1:

...

except

...

安装库

setup.py

运行 python setup.py install

Python3

help("modules") 查看当前系统安装了哪些模块

import socket

help(socket)

import socketserver

help(socketserver)

安装pip python-pip 是epel源下的rpm包

# pip3 list

decorator (4.0.9)

ipython (4.1.1)

ipython-genutils (0.1.0)

path.py (8.1.2)

pexpect (4.0.1)

pickleshare (0.6)

pip (1.5.6)

ptyprocess (0.5.1)

setuptools (20.2.2)

simplegeneric (0.8.1)

traitlets (4.1.0)

pip是一个安装和管理 Python 包的工具 ,是easy_install的替代品。

# pip3 install PyMySQL 与mysql连接相关的库

Downloading/unpacking PyMySQL

http://pypi.douban.com/simple/PyMySQL/ uses an insecure transport scheme (http). Consider using https if pypi.douban.com has it available

Downloading PyMySQL-0.7.2-py2.py3-none-any.whl (76kB): 76kB downloaded

Installing collected packages: PyMySQL

Successfully installed PyMySQL

Cleaning up...

In [1]: import pymysql

In [2]: pymysql.

pymysql.BINARY pymysql.Error pymysql.ProgrammingError pymysql.apilevel pymysql.get_client_info

pymysql.Binary pymysql.FIELD_TYPE pymysql.ROWID pymysql.charset pymysql.install_as_MySQLdb

pymysql.Connect pymysql.IntegrityError pymysql.STRING pymysql.connect pymysql.optionfile

pymysql.Connection pymysql.InterfaceError pymysql.TIME pymysql.connections pymysql.paramstyle

pymysql.DATE pymysql.InternalError pymysql.TIMESTAMP pymysql.constants pymysql.sys

pymysql.DATETIME pymysql.MySQLError pymysql.Time pymysql.converters pymysql.thread_safe

pymysql.DBAPISet pymysql.NULL pymysql.TimeFromTicks pymysql.cursors pymysql.threadsafety

pymysql.DataError pymysql.NUMBER pymysql.Timestamp pymysql.err pymysql.times

pymysql.DatabaseError pymysql.NotSupportedError pymysql.TimestampFromTicks pymysql.escape_dict pymysql.util

pymysql.Date pymysql.OperationalError pymysql.VERSION pymysql.escape_sequence pymysql.version_info

pymysql.DateFromTicks pymysql.PY2 pymysql.Warning pymysql.escape_string

# pip3 install paramiko 基于ssh实现远程管理的

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。
使用paramiko可以很好的解决以下问题:
需要使用windows客户端,
远程连接到Linux服务器,查看上面的日志状态,批量配置远程服务器,文件上传,文件下载等

ipython3

In [1]: import paramiko

In [2]: paramiko.

Display all 100 possibilities? (y or n)

基于socket通信的简单代码

socket:

Server: listen socket

Client: connect socket

起两个回话

一个client,一个server

In [2]: import socket

In [3]: help(socket)

In [4]: dir(socket) 查看可调用方法和可调用属性

Out[4]:

['AF_APPLETALK',

'AF_ASH',

'AF_ATMPVC',

In [6]: help(socket.socket)

In [7]: s = socket.soc

socket.socket socket.socketpair

In [7]: s = socket.socket() 创建一个套接字

In [8]: s.bind(('127.0.0.1',3008)) 绑定在本机的3008端口

In [9]: s.listen(10) 监听

另一个

# ss -tnlp

LISTEN 0 10 127.0.0.1:3008 *:* users:(("ipython",64056,7))

阻塞方式接受客户端连接

sc,client = s.accept() 等待客户端连接并发送数据过来

In [10]: sc,client = s.accept()

另一个

In [1]: import socket

In [2]: c = socket.socke

socket.socket socket.socketpair

In [2]: c = socket.socket()

In [3]: c.co

c.connect c.connect_ex

In [3]: c.connect(('127.0.0.1',3008)) 连接后,server阻塞结束

S

In [11]: print

print

In [11]: print(sc)

<socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketType.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 3008), raddr=('127.0.0.1', 59846)> sc是一个套接字

In [12]: print(client)

('127.0.0.1', 59846) 客户端地址使用随机端口进行连接

再开一个新回话

# ss -tan

ESTAB 0 0 127.0.0.1:3008 127.0.0.1:59846

ESTAB 0 0 127.0.0.1:59846 127.0.0.1:3008

一个来回两个连接

S

基于套接字文件来进行数据接收,将数据保存在data中。使用1024的缓存来接收

In [13]: data = sc.recv(1024) 会处于阻塞状态中

C

发送数据,基于二进制字节编码

In [4]: c.send(b"from client") b是基于二进制编码

Out[4]: 11

数据发送完成后,server阻塞就停止了

S

In [14]: print(data)

b'from client' 可以看到客户端发来的数据了

解码后来显示

In [15]: print(data.decode()) 不会显示其原始格式

from client

可以通过open打开一个文件,把接收的数据都放入到文件中

C

关闭连接

In [5]: c.close()

# ss -tan

LISTEN 0 10 127.0.0.1:3008 *:*

CLOSE-WAIT 1 0 127.0.0.1:3008 127.0.0.1:59846

FIN-WAIT-2 0 0 127.0.0.1:59846 127.0.0.1:3008

S

关闭连接

In [16]: s.close()

# ss -tan

CLOSE-WAIT 1 0 127.0.0.1:3008 127.0.0.1:59846

超时以后,两边都直接断开

安装mysql-server程序

yum install -y mysql-server

# service mysqld start

# mysql -u root

mysql> create database testdb;

Query OK, 1 row affected (0.00 sec)

mysql> grant all on testdb.* to 'testuser'@'127.0.0.1' identified by 'testpass';

Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)

# mysql -utestuser -h127.0.0.1 -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Python连接mysql

In [17]: import pymysql

In [18]: help(pymysql)

CLASSES

builtins.object

Connection

EOFPacketWrapper

LoadLocalFile

LoadLocalPacketWrapper

MySQLResult

MysqlPacket

FieldDescriptorPacket

OKPacketWrapper

RandStruct_323

class Connection(builtins.object)

| Representation of a socket with a mysql server.

|

| The proper way to get an instance of this class is to call

| connect().

|

| Methods defined here:

|

| __del__(self)

|

| __enter__(self)

| Context manager that returns a Cursor

|

| __exit__(self, exc, value, traceback)

| On successful exit, commit. On exception, rollback

|

| __init__(self, host=None, user=None, password='', database=None, port=3306, unix_socket=None, charset='', sql_mode=None, read_default_file=None, c

onv={0: <class 'decimal.Decimal'>, 1: <class 'int'>, 2: <class 'int'>, 3: <class 'int'>, 4: <class 'float'>, 5: <class 'float'>, 7: <function convert_mysq

l_timestamp at 0x7f96a10e07b8>, 8: <class 'int'>, 9: <class 'int'>, 10: <function convert_date at 0x7f96a10e0730>, 11: <function convert_timedelta at 0x7f

96a10e0620>, 12: <function convert_datetime at 0x7f96a10e0598>, 13: <class 'int'>, 15: <function through at 0x7f96a10e08c8>, 16: <function through at 0x7f

96a10e08c8>, 246: <class 'decimal.Decimal'>, 248: <function convert_set at 0x7f96a10e0840>, 249: <function through at 0x7f96a10e08c8>, 250: <function thro

ugh at 0x7f96a10e08c8>, 251: <function through at 0x7f96a10e08c8>, 252: <function through at 0x7f96a10e08c8>, 253: <function through at 0x7f96a10e08c8>, 2

54: <function through at 0x7f96a10e08c8>}, use_unicode=None, client_flag=0, cursorclass=<class 'pymysql.cursors.Cursor'>, init_command=None, connect_timeo

ut=None, ssl=None, read_default_group=None, compress=None, named_pipe=None, no_delay=None, autocommit=False, db=None, passwd=None, local_infile=False, max

_allowed_packet=16777216, defer_connect=False, auth_plugin_map={})

In [22]: conn = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'testuser',password = 'testpass',db = 'testdb')

In [23]: conn.

conn.DataError conn.character_set_name conn.escape_string conn.password conn.set_charset

conn.DatabaseError conn.charset conn.get_autocommit conn.ping conn.show_warnings

conn.Error conn.client_flag conn.get_host_info conn.port conn.socket

conn.IntegrityError conn.close conn.get_proto_info conn.protocol_version conn.sql_mode

conn.InterfaceError conn.commit conn.get_server_info conn.query conn.ssl

conn.InternalError conn.connect conn.host conn.rollback conn.thread_id

conn.NotSupportedError conn.connect_timeout conn.host_info conn.salt conn.unix_socket

conn.OperationalError conn.cursor conn.init_command conn.select_db conn.use_unicode

conn.ProgrammingError conn.cursorclass conn.insert_id conn.server_capabilities conn.user

conn.Warning conn.db conn.kill conn.server_charset conn.write_packet

conn.affected_rows conn.decoders conn.literal conn.server_language

conn.autocommit conn.encoders conn.max_allowed_packet conn.server_status

conn.autocommit_mode conn.encoding conn.next_result conn.server_thread_id

conn.begin conn.escape conn.open conn.server_version

向mysql中创建和取数据,需要先创建一个游标

In [23]: cur = conn.cursor()

In [24]: cur.

cur.DataError cur.InternalError cur.arraysize cur.execute执行命令 cur.max_stmt_length cur.scroll

cur.DatabaseError cur.NotSupportedError cur.callproc cur.executemany执行大量命令 cur.mogrify cur.setinputsizes

cur.Error cur.OperationalError cur.close cur.fetchall cur.nextset cur.setoutputsizes

cur.IntegrityError cur.ProgrammingError cur.connection cur.fetchmany cur.rowcount

cur.InterfaceError cur.Warning cur.description cur.fetchone cur.rownumber

In [27]: cur.execute("""create table if not exists tb1 (id int auto_increment not null primary key,name varchar(30) not null,email varchar(100) not null)""")

Out[27]: 0

查看表是否创建成功

[root@iptables1 ~]# mysql -utestuser -h127.0.0.1 -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use testdb

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+------------------+

| Tables_in_testdb |

+------------------+

| tb1 |

+------------------+

1 row in set (0.01 sec)

mysql>

往表中写数据

In [29]: cur.execute("insert into tb1 (name,email) values ("tom","hello@gmail.com")")

File "<ipython-input-29-f77d021f3652>", line 1

cur.execute("insert into tb1 (name,email) values ("tom","hello@gmail.com")") 使用单引号

^

SyntaxError: invalid syntax

In [30]: cur.execute("insert into tb1 (name,email) values ('tom','hello@gmail.com')")

Out[30]: 1

mysql> select * from tb1; 由于这里是myisam引擎,没有事务,创建后,这里马上就可以查看了,如果是innodb存储引擎则,需要在事务提交后,才能查看到的

+----+------+-----------------+

| id | name | email |

+----+------+-----------------+

| 1 | tom | hello@gmail.com |

+----+------+-----------------+

1 row in set (0.00 sec)

In [31]: cur.execute("insert into tb1 (name,email) values ('jerry','jerry@gmail.com')")

Out[31]: 1

mysql> select * from tb1;

+----+-------+-----------------+

| id | name | email |

+----+-------+-----------------+

| 1 | tom | hello@gmail.com |

| 2 | jerry | jerry@gmail.com |

+----+-------+-----------------+

2 rows in set (0.00 sec)

ins_sql = "insert into tb1 (name,email) values (%s,%s)"

values = (("comyn","comyn@gmail.com"),("derek","derek@gmail.com"))

cur.executemany(ins_sql, values)

comn.commit() 提交所有的修改

In [33]: ins_sql = "insert into tb1 (name,email) values (%s,%s)"

In [34]: values = (("comyn","comyn@gmail.com"),("derek","derek@gmail.com"))

In [35]: cur.executemany(ins)

%install_default_config %install_ext %install_profiles ins_sql install.log install.log.syslog

In [35]: cur.executemany(ins_sql,values)

Out[35]: 2

mysql> select * from tb1;

+----+-------+-----------------+

| id | name | email |

+----+-------+-----------------+

| 1 | tom | hello@gmail.com |

| 2 | jerry | jerry@gmail.com |

| 3 | jerry | jerry@gmail.com |

| 4 | comyn | comyn@gmail.com |

| 5 | derek | derek@gmail.com |

+----+-------+-----------------+

5 rows in set (0.00 sec)

In [36]: conn.commit()

In [37]: cur.execute("select * from tb1") 显示有5行数据返回

Out[37]: 5

所有数据取出放在data中

In [38]: data = cur.fetchall()

In [39]: data

Out[39]:

((1, 'tom', 'hello@gmail.com'),

(2, 'jerry', 'jerry@gmail.com'),

(3, 'jerry', 'jerry@gmail.com'),

(4, 'comyn', 'comyn@gmail.com'),

(5, 'derek', 'derek@gmail.com'))

In [40]: print(data)

((1, 'tom', 'hello@gmail.com'), (2, 'jerry', 'jerry@gmail.com'), (3, 'jerry', 'jerry@gmail.com'), (4, 'comyn', 'comyn@gmail.com'), (5, 'derek', 'derek@gmail.com'))

In [41]: if data:

....: for record in data:

....: print(record)

....:

(1, 'tom', 'hello@gmail.com')

(2, 'jerry', 'jerry@gmail.com')

(3, 'jerry', 'jerry@gmail.com')

(4, 'comyn', 'comyn@gmail.com')

(5, 'derek', 'derek@gmail.com')

paramiko

import paramiko

help(paramiko.SSHClient)

In [42]: import paramiko

In [43]: ssh = paramiko.SSHClient()

In [44]: ssh.

ssh.close ssh.get_host_keys ssh.load_host_keys ssh.save_host_keys

ssh.connect ssh.get_transport ssh.load_system_host_keys ssh.set_log_channel

ssh.exec_command ssh.invoke_shell ssh.open_sftp ssh.set_missing_host_key_policy

In [45]: help(ssh.set)

ssh.set_log_channel ssh.set_missing_host_key_policy

In [45]: help(ssh.set_missing_host_key_policy)

Help on method set_missing_host_key_policy in module paramiko.client:

set_missing_host_key_policy(policy) method of paramiko.client.SSHClient instance

Set the policy to use when connecting to a server that doesn't have a

host key in either the system or local `.HostKeys` objects. The

default policy is to reject all unknown servers (using `.RejectPolicy`).

You may substitute `.AutoAddPolicy` or write your own policy class.

:param .MissingHostKeyPolicy policy:

the policy to use when receiving a host key from a

previously-unknown server

In [46]: ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

In [47]: ssh.connect("192.168.16.36",username="root",password="123456")

In [48]: 已经连接上了

可以在远程主机上运行命令了

In [48]: ssh.exec_command("whoami")

Out[48]:

(<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xa0bb9be0 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>,

<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xa0bb9be0 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>,

<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xa0bb9be0 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>)

返回的结果都保存在了一个对象上,有三个 标准输入、标准输出、标准错误

In [49]: stdin,stdout,stderr=ssh.exec_command("whoami")

In [50]: stdout.

stdout.FLAG_APPEND stdout.FLAG_WRITE stdout.closed stdout.seek

stdout.FLAG_BINARY stdout.SEEK_CUR stdout.flush stdout.tell

stdout.FLAG_BUFFERED stdout.SEEK_END stdout.newlines stdout.write

stdout.FLAG_LINE_BUFFERED stdout.SEEK_SET stdout.read stdout.writelines

stdout.FLAG_READ stdout.channel stdout.readline stdout.xreadlines

stdout.FLAG_UNIVERSAL_NEWLINE stdout.close stdout.readlines

In [50]: stdout.readline

Out[50]: <bound method ChannelFile.readline of <paramiko.ChannelFile from <paramiko.Channel 1 (closed) -> <paramiko.Transport at 0xa0bb9be0 (cipher aes128-ctr, 128 bits) (active; 0 open channel(s))>>>>

In [51]: stdout.readline()

Out[51]: 'root\n'

In [53]: stdin,stdout,stderr=ssh.exec_command("whoami")

In [54]: stdout.readli

stdout.readline stdout.readlines

In [54]: stdout.readlines()

Out[54]: ['root\n']

In [55]: stdin,stdout,stderr=ssh.exec_command("whoami")

In [56]: stdout.read()

Out[56]: b'root\n'

In [57]: stdin,stdout,stderr=ssh.exec_command("whoami")

In [58]: stdout.read().decode()

Out[58]: 'root\n'

远程服务器获取文件到本地

In [59]: ssh.

ssh.close ssh.get_host_keys ssh.load_host_keys ssh.save_host_keys

ssh.connect ssh.get_transport ssh.load_system_host_keys ssh.set_log_channel

ssh.exec_command ssh.invoke_shell ssh.open_sftp ssh.set_missing_host_key_policy

In [59]: ftp = ssh.open_sftp() 生成ftp连接对象,需要先安装一下ftp工具

In [60]: ftp.

ftp.chdir ftp.from_transport ftp.listdir ftp.mkdir ftp.readlink ftp.sock ftp.unlink

ftp.chmod ftp.get ftp.listdir_attr ftp.normalize ftp.remove ftp.stat ftp.utime

ftp.chown ftp.get_channel ftp.listdir_iter ftp.open ftp.rename ftp.symlink

ftp.close ftp.getcwd ftp.logger ftp.put ftp.request_number ftp.truncate

ftp.file ftp.getfo ftp.lstat ftp.putfo ftp.rmdir ftp.ultra_debug

获取帮助

In [60]: help(ftp.get)

get(remotepath, localpath, callback=None) method of paramiko.sftp_client.SFTPClient instance

Copy a remote file (``remotepath``) from the SFTP server to the local

host as ``localpath``. Any exception raised by operations will be

passed through. This method is primarily provided as a convenience.

:param str remotepath: the remote file to copy

:param str localpath: the destination path on the local host

:param callable callback:

optional callback function (form: ``func(int, int)``) that accepts

the bytes transferred so far and the total bytes to be transferred

.. versionadded:: 1.4

.. versionchanged:: 1.7.4

Added the ``callback`` param

In [6]: ftp.get('/etc/rsyncd.conf','/tmp/rsyncd.conf.paramiko')

# ls /tmp/ rsyncd.conf.paramiko

上传一个文件到远程的服务器上

In [7]: ftp.put('/etc/hosts','/tmp/hosts.paramiko')

Out[7]: <SFTPAttributes: [ size=158 uid=0 gid=0 mode=0o100644 atime=1460449355 mtime=1460449355 ]>

# ls /tmp/

hosts.paramiko 上传成功了

# rm /tmp/hosts.paramiko

rm: remove regular file `/tmp/hosts.paramiko'? y

In [8]: res = ftp.put('/etc/hosts','/tmp/hosts.paramiko')

In [9]: if res:

...: print("successful")

...:

successful

# ls /tmp/

hosts.paramiko

ftp连接结束后,可以关闭

In [10]: ftp.close()

In [11]: ssh.close()

转载于:https://my.oschina.net/u/1762991/blog/666204

1.3Python快速入门相关推荐

  1. python快速入门精讲_Python快速入门精讲

    基础入门篇 第0章从零开始3 0.1克服编程恐惧3 0.2如何写出好程序4 0.3为什么选择Python5 0.4Python的发展和应用6 0.5一些建议8 0.6多平台搭建Python开发环境10 ...

  2. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  3. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  4. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  5. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  6. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  7. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  8. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  9. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

最新文章

  1. c++各种数据类型表示范围
  2. R语言单因素方差分析与协方差分析
  3. [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)
  4. 创业公司的容器化之路
  5. java配置jndi连接数_JavaWeb:Tomcat下配置数据源(JNDI)连接数据库 | 学步园
  6. 从BI到OLAP,数据仓库最终到底能干什么?
  7. ARM LDR与MOV的区别
  8. json生成shp_使用JS把shapefile地图数据转换为geojson格式
  9. Atitit oil painting article list sumup s55 C:\Users\Administrator\Desktop\油画技术资料包\Atitit Atitit 图像
  10. java 下拉框带搜索功能_java简单的实现搜索框的下拉显示相关搜索功能
  11. 少量代码完成火山图绘制
  12. VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (1) 介绍
  13. win10网络计算机删除,手把手教你彻底删除win10系统自带的微软拼音输入法-网络教程与技术 -亦是美网络...
  14. 腾讯云租用CentOS 7.2 64
  15. 在面试时应该如何自我介绍?
  16. 分享:查重软件(免费)
  17. Excel数据分类汇总与数据透视表
  18. 一般家用路由器买多大的合适_家用路由器选多少M(兆)的合适【图】
  19. IMX6UL 飞凌 LINUX 学习记录(1)
  20. FPGA学习-基于FPGA的高速串行通信GTX知识梳理

热门文章

  1. BZOJ 2660 (BJOI 2012) 最多的方案
  2. 【Unity与23种设计模式】访问者模式(Visitor)
  3. android 用户界面教程实例汇总
  4. Asp.Net自学笔记...(运算符)
  5. 诗和远方:无题(五十二)- 写给认识的一个老姐的两只猫
  6. Kafka版本介绍Version2.4.0
  7. 编译型和解释型语言的区别
  8. shell的建立与执行实验报告_实验七 Shell脚本运行的优化
  9. 学习ActiveMQ(五):activemq的五种消息类型和三种监听器类型
  10. flask简单登录注册