subprocess
os.system 输出命令结果到屏幕,返回命令执行状态
os.popen("dir") 返回执行 dir 的结果的对象
os.popen("dir").read() 读取os.popen("dir")的对象的结果
python 2.7
commands (仅支持 linux 和 python2.7)
commands.getstatusoutput("dir") # 返回一个元祖,第一个元素为返回状态,后面是值
python 3.5 以后的新模块
subprocess.run(["df","-h"])
subprocess.run("df -h |grep sda1",shell=True)
旧版本,实现类似的功能的其他方法:
面的对象

类的特性
封装
1.防止数据被随意修改
2.使外部程序不需要关注对象内部的构造,只需要通过此对象对外提供的接口进行直接访问即可
继承
通过父类 ->子类的方式以最小代码量的方式实现 不同角色
类的定义
构造函数
类的方法
实例化
类 -> 实例化 -> 实例对象
扩展阅读:https://www.cnblogs.com/wupeiqi/p/4766801.html
* 例:
class Provice:
country = "China" # 静态变量(字段),建议使用类来调用
def __init__(self, name): #__init__ 构造函数(方法)
temp = "xxx"
self.name = name # 普通变量{属性(字段)},存放在对象中
def show(self): # 普通方法{方法(动态属性)},存在类中,第一个参数必须是 self
print('show')
@classmethod
def class_func(cls): # 类方法
""" 定义类方法,至少有一个cls参数 """
print '类方法'
@staticmethod # 静态方法
def static_func():
""" 定义静态方法 ,无默认参数"""
print '静态方法'
hebei = Provice("河北")
henan = Provice("河南")
print(hebei.country) #China
# 访问限制
例:
class Student(object):
...
def set_score(self, score):
if 0 <= score <= 100:
self.__score = score
else:
raise ValueError('bad score')
# 私有变量(属性/字段)
self.__score # 实例的变量名如果以__开头,只有内部可以访问,外部不能访问
# 注:
* 在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量
特殊变量是可以直接访问的,不是private变量
* __xxx是可以被可强制访问的,不能直接访问__score是因为Python解释器对外把__name变量改成了_Student__score
因此,可以通过 方式 r1._Student__name 访问
* _xxx 这样的实例变量外部是可以访问的,但是,按照约定俗成的规定:
当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
nationality = “JP” # 公有属性(在类里定义的属性)
扩展阅读:
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318650247930b1b21d7d3c64fe38c4b5a80d4469ad7000
self 就是调用单签方法的对象
# 几种常用装饰器
静态方法(@staticmethod):
* staticmethod 是类静态方法,其跟成员方法的区别是没有 self 指针
* 最重要的作用是:可以在类不进行实例化的情况下调用
类方法(@classmethod):
* 不管是通过实例还是类本身使用类方法,都只会调用类变量,不会调用实例变量
* classmethod 与其他成员方法的区别在于所接收的第一个参数不是 self 类实例的指针,而是当前类的具体类型
将方法变成属性(@property):
把一个普通方法变成一个静态属性
例:
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
扩展阅读:
http://blog.csdn.net/mdl13412/article/details/22608283
# 封装:
- 类中封装类,属性、方法
- 对象中封装类:普通属性的值
# 继承:
经典类 vs 新式类
语法区别:
继承顺序的区别:
多继承式 (python3 不管 经典类还是新式类 都是 广度查询)
(python2 经典类 : 深度查询,新式类 : 广度查询)
# 子类继承父类构造函数的写法
# super()
例:
class A(object): # A must be new-style class
def __init__(self):
print "enter A"
print "leave A"
class B(A): # A --> 1B
def __init__(self):
print "enter B"
super(B, self).__init__() # 子类构造函数中 继承父类的构造函数的写法
print "leave B"
* 扩展阅读:https://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html
# 多态
* 扩展阅读:
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431865288798deef438d865e4c2985acff7e9fad15e3000#0
22. 类的特殊成员
__len__() # 定义 __len__() 方法让实例可以被 len() 函数作用
__slots__ # 限制能动态添加的实例属性 __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
__doc__ # 打印类的说明
__module__ # 输出类所在的模块
__class__ # 输出类本身
__init__ # 构造方法,创建对象时自动触发
__call__ # 对象后面加括号,触发执行。用 callable()函数判断是否是一个 callable 对象
__dict__ # 以字典形式返回当前对象内存空间内的所有成员:
* 如果是实例:返回所有的实例属性变量
* 如果是类:返回所有类属性和类方法
* 如果是子类:返回子类的属性和方法
# 通过实例调用以字典方式打印实例的所有属性,不打印类的
__str__ # 例: # 执行print(obj)或者str(obj)的时候,会自动执行__str__
class Foo:
def __str__(self):
return "<obj:%s>"%selfss.name
obj = Foo()
__getitem__ # 将对象当成字典用(r['xx'] 对象后加[]会直接执行__getitem__)
__setitem__ # r['xxx']=123 # 自动执行__setitem__
__delitem__ # del r['aaaa'] #自动执行__delitem__
__new__ # 用来创建实例
__del__ # 析构方法(析构方法,当对象在内存中被释放时,自动触发执行。)
* 扩展阅读 :https://www.cnblogs.com/whatisfantasy/p/6038346.html
23. 类的起源与metaclass
# 用type 创建类:
type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))
例:
class MyShinyClass(object):
pass
等价于:
>>> MyShinyClass = type('MyShinyClass', (), {}) # 返回一个类对象
>>> print MyShinyClass
<class '__main__.MyShinyClass'>
>>> print MyShinyClass() # 创建一个该类的实例
<__main__.MyShinyClass object at 0x8997cec>
* 扩展阅读:http://blog.jobbole.com/21351/
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319106919344c4ef8b1e04c48778bb45796e0335839000
24. 反射
hasattr(obj,'name_str') # 判断一个对象里是否有对应'name_str'字符串的方法
getattr(obj,'name_str') # 根据'name_str'字符串对应的方法去获得obj对象的'name_str'方法的内存空间地址
setarrt() # 动态的把外部的一个方法或属性装配到类里
delattr()
26. 异常处理
例:
s1 = 'hello'
try:
int(s1)
except IndexError as e: # 抓取 Error1
print(e)
except (KeyError,ValueError) as e: # 或同时抓取 Error2,Error3
print(e)
except ValueError as e:
print(e)
except Exception as e : # 抓取任意错误(不建议用在开头)
else:
print("一切正常")
finally:
print("不管有没有错都执行")
# 缩进、语法的错误是抓取不到的
自定义异常:
例:
class ExampleError(Exception):
def __init__(self,msg):
self.message = msg
try:
raise ExampleError('数据库连不上') # 主动触发异常
except ExampleError as e:
print(e)
* 注:
IndentationError,SyntaxError 等错误不能被捕获
# 断言
assert
# 动态导入
__import__('day9.testmod')
* 扩展阅读:https://www.cnblogs.com/wupeiqi/articles/5017742.html
28. socket 通信介绍
发送端 ,例:
import socket
socket.TCP/IP
connect(a.ip,a.port)
socket.sent(hello)
socket.recv()
socket.close()
接收端,例:
import socket
socket.TCP/IP
listen(0.0.0.0,6969)
waiting()
recv()
* 扩展阅读:
图例: https://www.cnblogs.com/idontknowthisperson/p/5958536.html
Python之socket编程 :http://blog.csdn.net/techml/article/details/71128492
* sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
参数一:地址簇
socket.AF_INET IPv4(默认)
socket.AF_INET6 IPv6
socket.AF_UNIX 只能够用于单一的Unix系统进程间通信
参数二:类型
socket.SOCK_STREAM 流式socket , for TCP (默认)
socket.SOCK_DGRAM 数据报式socket , for UDP
socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET 可靠的连续数据包服务
参数三:协议
0 (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议
* socket 扩展阅读:
http://yangrong.blog.51cto.com/6945369/1339593
廖雪峰TCP编程 http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e495f640612f4b08975398796939ec3c000
# parser 模块
只能读取参数
getpass
configparser
# getattr 对类的私有方法无效
# 关于分包和粘包
扩展阅读:
TCP Socket的粘包和分包的处理: http://blog.csdn.net/yannanxiu/article/details/52096465
浙公网安备 33010602011771号