博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python_模块
阅读量:4505 次
发布时间:2019-06-08

本文共 20693 字,大约阅读时间需要 68 分钟。

  • time
1 time_obj = time.localtime() 2 print("%s-%s-%s %s:%s" % (time_obj.tm_year,time_obj.tm_mon,time_obj.tm_mday,time_obj.tm_hour,time_obj.tm_min)) 3  4 print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) 5  6 print(time.strptime("2016-01-28 15:40:12","%Y-%m-%d %H:%M:%S")) 7  8 print(datetime.date.today()) 9 10 current_time = datetime.datetime.now()11 print(current_time)12 print(current_time.timetuple())13 14 new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天15 new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天16 new_date = datetime.datetime.now() + datetime.timedelta(hours=-10)#比现在减10小时17 new_date = datetime.datetime.now() + datetime.timedelta(seconds=120)#比现在增加120s18 new_date = datetime.datetime.now() + datetime.timedelta(weeks=1) #比现在加一周
  • sys
sys.argv           命令行参数List,第一个元素是程序本身路径sys.exit(n)        退出程序,正常退出时exit(0)sys.version        获取Python解释程序的版本信息sys.maxint         最大的Int值sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值sys.platform       返回操作系统平台名称sys.stdin          输入相关sys.stdout         输出相关sys.stderror       错误相关1、sys.argv使用方法:import sys,osos.mkdir(sys.argv[1])python test4.py heelo #创建目录2、如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加:import sysimport osproject_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.append(project_path
1 import sys 2 import time 3  4  5 def view_bar(num, total): 6     rate = float(num) / float(total) 7     rate_num = int(rate * 100) 8     r = '\r%d%% |%s' % (rate_num, rate_num * "*") 9     sys.stdout.write(r)10     sys.stdout.flush()11 12 13 if __name__ == '__main__':14     for i in range(0, 101):15         time.sleep(0.1)16         view_bar(i, 100)
进度百分比
import sysimport timedef view_bar(num, total):    rate = float(num) / float(total)    rate_num = int(rate * 100)    r = '\r%d%%' % (rate_num, )    sys.stdout.write(r)    sys.stdout.flush()if __name__ == '__main__':    for i in range(0, 100):        time.sleep(0.1)        view_bar(i, 100)
  • os
1 os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd 3 os.curdir                   返回当前目录: ('.') 4 os.pardir                   获取当前目录的父目录字符串名:('..') 5 os.makedirs('dir1/dir2')    可生成多层递归目录 6 os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname 8 os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 9 os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印10 os.remove()                 删除一个文件11 os.rename("oldname","new")  重命名文件/目录12 os.stat('path/filename')    获取文件/目录信息13 os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"14 os.linesep                  当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"15 os.pathsep                  用于分割文件路径的字符串16 os.name                     字符串指示当前使用平台。win->'nt'; Linux->'posix'17 os.system("bash command")   运行shell命令,直接显示18 os.environ                  获取系统环境变量19 os.path.abspath(path)       返回path规范化的绝对路径20 os.path.split(path)         将path分割成目录和文件名二元组返回21 os.path.dirname(path)       返回path的目录。其实就是os.path.split(path)的第一个元素22 os.path.basename(path)      返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素23 os.path.exists(path)        如果path存在,返回True;如果path不存在,返回False24 os.path.isabs(path)         如果path是绝对路径,返回True25 os.path.isfile(path)        如果path是一个存在的文件,返回True。否则返回False26 os.path.isdir(path)         如果path是一个存在的目录,则返回True。否则返回False27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略28 os.path.getatime(path)      返回path所指向的文件或者目录的最后存取时间29 os.path.getmtime(path)      返回path所指向的文件或者目录的最后修改时间
  • 序列化

python提供两个模块:json和pickle,其中功能提供有四个:dump,load,dumps,loads

1 dumps与loads写法: 2 import pickle 3  4 data = {
"k1":123,"k2":"hello"} 5 6 with open("read.txt","wb") as f: 7 f.write(pickle.dumps(data)) 8 9 import pickle10 11 with open("read.txt","rb") as f:12 data = pickle.loads(f.read())13 print(data)14 15 16 dump与load写法:17 import pickle18 19 data = {
"k1":123,"k2":"hello"}20 21 with open("read.txt","wb") as f:22 pickle.dump(data,f)23 24 import pickle25 26 with open("read.txt","rb") as f:27 data = pickle.load(f)28 print(data)29 30 json:31 import pickle,json32 33 data = {
"k1":123,"k2":"hello"}34 35 with open("read.txt","w") as f:36 # f.write(pickle.dumps(data))37 #pickle.dump(data,f)38 #f.write(json.dumps(data))39 json.dump(data,f)40 41 import pickle,json42 43 with open("read.txt","rb") as f:44 # data = pickle.loads(f.read())45 # data = pickle.load(f)46 # print(data)47 48 # data = json.load(f)49 # print(data)50 data = json.loads(f.read())51 print(data)
1 转换为字符串: 2 user = [“aa”,”bb”,”cc”] 3 s = json.dumps(user) 4 print(s,type(s)) 5  6 dic = {‘k1’:123,’k2’:”ws”} 7 json.dump(dic,open(“db”,”w”)) 8  9 #字符串转换成字典10 r = json.load(open(‘db’,’r’))11 print(r,type(r))12 13 #dumps/dump:用于元组,列表,字典等形式转换成字符串14 #loads/load:用于字典,列表,元组等形式字符串,装换成字典,列表,元组
  • 基本模块知识
1 from project.day3 import test9 2  3 print(__file__) #本身自己文件的路径 4 print(__doc__)  #py文件的注释 5 print(test9.__package__) # 当前py所在文件夹,用.划分 6 print(test9.__cached__) #缓存 7 print(__name__) #只有执行python 主程序时,__name__=='__main__',否则,执行模块名 8  9 def  test():10     """验证结果"""11     print("测试中")12 13 print(test.__doc__)
  • requests模块
1 import urllib 2 import requests 3 from xml.etree import ElementTree as ET 4  5 # 使用内置模块urllib发送HTTP请求,或者XML格式内容 6 """ 7 f = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508') 8 result = f.read().decode('utf-8') 9 """10 11 12 # 使用第三方模块requests发送HTTP请求,或者XML格式内容13 r = requests.get('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')14 result = r.text15 16 # 解析XML格式内容17 node = ET.XML(result)18 19 # 获取内容20 if node.text == "Y":21     print("在线")22 else:23     print("离线")
检查qq是否在线状态
# 1、无参数实例import requestsret = requests.get('https://github.com/timeline.json')print(ret.url)print(ret.text)# 2、有参数实例import requestspayload = {
'key1': 'value1', 'key2': 'value2'}ret = requests.get("http://httpbin.org/get", params=payload)print(ret.url)print(ret.text)
get请求
# 1、基本POST实例import requestspayload = {
'key1': 'value1', 'key2': 'value2'}ret = requests.post("http://httpbin.org/post", data=payload)print(ret.text)# 2、发送请求头和数据实例import requestsimport jsonurl = 'https://api.github.com/some/endpoint'payload = {
'some': 'data'}headers = {
'content-type': 'application/json'}ret = requests.post(url, data=json.dumps(payload), headers=headers)print(ret.text)print(ret.cookies)
post请求
1 import requests,json,pprint 2  3 place = input("请输入天气地点:") 4 JsonUrl = "http://wthrcdn.etouch.cn/weather_mini?city=%s" % (place) 5 TestJsonUrl = requests.get(JsonUrl) 6 try: 7     TestJsonUrl.raise_for_status() 8 except: 9     print("网址请求出错")10 11 Data = json.loads(TestJsonUrl.text)12 pprint.pprint(Data)13 w = Data['data']14 print("地点:%s" % w['city'])15 16 #日期17 date_a = []18 #最高温与最低温19 highTemp = []20 lowTemp = []21 #天气22 weather =[]23 #进行五天的天气遍历24 for i in range(len(w['forecast'])):25     date_a.append(w['forecast'][i]['date'])26     highTemp.append(w['forecast'][i]['high'])27     lowTemp.append(w['forecast'][i]['low'])28     weather.append(w['forecast'][i]['type'])29 30     #输出31     print("日期:" + date_a[i])32     print("\t温度:最" + lowTemp[i] + '~最' + highTemp[i] )33     print("\t天气:" + weather[i])34     print("")35 print("\n今日着装:" + w['ganmao'])36 print("当前温度:" + w['wendu'] + "℃")
实现获取天气状况
1 #通过HTTP请求和XML实现获取电视节目 2 import requests 3 from xml.etree import ElementTree as ET 4  5 payload = {
'theTVstationID':3} 6 r = requests.post("http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx/getTVchannelDataSet",data=payload) 7 ret = r.text 8 9 root = ET.XML(ret)10 for node in root.iter('TvChanne'):11 print(node.find('tvChannel').text)
实现获取电视节目
  • hashlib加密

主要提供了SHA1,SHA256,SHA384,SHA512,MD5算法。

1 import hashlib 2   3 # ######## md5 ######## 4 hash = hashlib.md5() 5 # help(hash.update) 6 hash.update(bytes('admin', encoding='utf-8')) 7 print(hash.hexdigest()) 8 print(hash.digest()) 9  10  11 ######## sha1 ########12  13 hash = hashlib.sha1()14 hash.update(bytes('admin', encoding='utf-8'))15 print(hash.hexdigest())16  17 # ######## sha256 ########18  19 hash = hashlib.sha256()20 hash.update(bytes('admin', encoding='utf-8'))21 print(hash.hexdigest())22  23  24 # ######## sha384 ########25  26 hash = hashlib.sha384()27 hash.update(bytes('admin', encoding='utf-8'))28 print(hash.hexdigest())29  30 # ######## sha512 ########31  32 hash = hashlib.sha512()33 hash.update(bytes('admin', encoding='utf-8'))34 print(hash.hexdigest())35 36 如需要安全可靠,对加密算法中添加自定义key再来做加密:37 import hashlib38  39 # ######## md5 ########40  41 hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))42 hash.update(bytes('admin',encoding="utf-8"))43 print(hash.hexdigest())44 45 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密:46 import hmac47  48 h = hmac.new(bytes('898oaFs09f',encoding="utf-8"))49 h.update(bytes('admin',encoding="utf-8"))50 print(h.hexdigest())
  • xml
1 xml文件格式如下: 2  3     
4
2
5
2023
6
141100
7
8
9
10
11
5
12
2026
13
59900
14
15
16
17
69
18
2026
19
13600
20
21
22
23
1、解析xml利用ElementTree.XML将字符串解析成xml对象from xml.etree import ElementTree as ET with open("testxml.xml","r") as f:     root = ET.XML(f.read())     print(root.tag)利用ElementTree.parse将文件直接解析成xml对象from xml.etree import ElementTree as ETroot = ET.parse("testxml.xml")test = root.getroot()print(test)2、遍历xml文档的所有内容from xml.etree import ElementTree as ETroot = ET.parse("testxml.xml")test = root.getroot()print(test.tag)for child in test:    print(child.tag,child.attrib)    for i in child:        print(i.tag,i.text)3、遍历xml中指定的节点from xml.etree import ElementTree as ETroot = ET.parse("testxml.xml")test = root.getroot()print(test.tag)for node in test.iter("year"):    print(node.tag,node.text)4、修改节点内容from xml.etree import ElementTree as ETroot = ET.parse("testxml.xml")test = root.getroot()print(test.tag)for node in root.iter("year"):    #将year节点内容自增一    new_year = int(node.text) + 1    node.text = str(new_year)    # 设置属性    node.set('name','yinjia')    node.set('age','18')    #删除属性    del node.attrib['name']root.write('testxml.xml',encoding='utf-8')5、删除节点from xml.etree import ElementTree as ETroot = ET.parse("testxml.xml")test = root.getroot()print(test.tag)for node in test.findall('country'):    rank = int(node.find("rank").text)    if rank > 50:        test.remove(node)root.write("testxml.xml",encoding='utf-8')
  •  创建xml文档
1 from xml.etree import ElementTree as ET 2  3 #创建根节点 4 root = ET.Element("Home") 5  6 #创建节点大儿子 7 son1 = ET.Element("son",{
"name":"儿1"}) 8 #创建节点小儿子 9 son2 = ET.Element("son",{
"name":"儿2"})10 11 #在大儿子中创建两个孙子12 grandson1 = ET.Element("grandson",{
"name":"孙1"})13 grandson2 = ET.Element("grandson",{
"name":"孙2"})14 son1.append(grandson1)15 son1.append(grandson2)16 17 #把儿子添加到根节点18 root.append(son1)19 root.append(son2)20 21 tree = ET.ElementTree(root)22 tree.write('creat.xml',encoding='utf-8',short_empty_elements=False)
创建方法一
1 from xml.etree import ElementTree as ET 2  3 #创建根节点 4 root = ET.Element("Home") 5  6 #创建节点大儿子 7 son1 = root.makeelement("son",{
"name":"儿1"}) 8 9 #创建节点小儿子10 son2= root.makeelement("son",{
"name":"儿2"})11 12 #在大儿子中创建两个孙子13 grandson1 = son1.makeelement("grandson",{
"name":"孙1"})14 grandson2 = son1.makeelement("grandson",{
"name":"孙2"})15 16 son1.append(grandson1)17 son1.append(grandson2)18 19 #把儿子添加到根节点20 root.append(son1)21 root.append(son2)22 23 tree = ET.ElementTree(root)24 tree.write('creat.xml',encoding='utf-8',short_empty_elements=False)
创建方法二
1 from xml.etree import ElementTree as ET 2  3 #创建根节点 4 root = ET.Element("Home") 5  6 #创建节点大儿子 7 son1 = ET.SubElement(root,"son",attrib={
"name":"儿1"}) 8 #创建节点小儿子 9 son2 = ET.SubElement(root,"son",attrib={
"name":"儿2"})10 11 #在大儿子中创建一个孙子12 grandson1 = ET.SubElement(son1,"grandson",attrib={
"name":"孙1"})13 grandson1.text = "孙子"14 15 et = ET.ElementTree(root)#生成文档对象16 et.write("test.xml",encoding='utf-8',xml_declaration=True)
创建方法三

 优化默认保存设置成缩进格式,如下:

1 #优化改进默认设置成缩进格式 2 from xml.etree import ElementTree as ET 3 from xml.dom import minidom 4  5 def prettify(elem): 6     """ 7     将节点转换成字符串,并添加缩进 8     :param elem: 9     :return:10     """11     rough_string = ET.tostring(elem,"utf-8")12     reparsed = minidom.parseString(rough_string)13     return reparsed.toprettyxml(indent='\t')14 15 #创建根节点16 root = ET.Element("Home")17 18 #创建节点大儿子19 son1 = ET.SubElement(root,"son",attrib={
"name":"儿1"})20 #创建节点小儿子21 son2 = ET.SubElement(root,"son",attrib={
"name":"儿2"})22 23 #在大儿子中创建一个孙子24 grandson1 = ET.SubElement(son1,"grandson",attrib={
"name":"孙1"})25 grandson1.text = "孙子"26 27 raw_str = prettify(root)28 with open("test.xml",'w',encoding='utf-8') as f:29 f.write(raw_str)
View Code
  •  xml命名空间
假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 
Apples
Bananas
African Coffee Table
80
120
元素,就会发生命名冲突。使用前缀来避免命名冲突此文档带有某个表格中的信息:此 XML 文档携带着有关一件家具的信息:现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的
)。通过使用前缀,我们创建了两种不同类型的
元素 (
元素。
1 from xml.etree import ElementTree as ET 2  3 ET.register_namespace('com',"http://www.company.com") #some name 4  5 # build a tree structure 6 root = ET.Element("{http://www.company.com}STUFF") 7 body = ET.SubElement(root, "{http://www.company.com}MORE_STUFF", attrib={
"{http://www.company.com}hhh": "123"}) 8 body.text = "STUFF EVERYWHERE!" 9 10 # wrap it in an ElementTree instance, and save as XML11 tree = ET.ElementTree(root)12 13 tree.write("page.xml",14 xml_declaration=True,15 encoding='utf-8',16 method="xml")
View Code
  •  Configparser模块
1 #config.ini配置文件 2  3 [com1] 4 port = 80 5 url = www.shou.com 6 k1 = 123 7  8 [com2] 9 admin = test10 password = 123
1 import configparser 2  3 #读取文件操作 4 con = configparser.ConfigParser() 5 con.read("config.ini",encoding='utf-8') 6  7 result = con.sections() #获取所有项名 8 print(result) 9 10 result1 = con.options("com1") #获取某项名属下的键名11 print(result1)12 13 result2 = con.items("com2") #获取某项名下的所有键值对14 print(result2)15 16 result3  = con.get("com1","ip") #获取指定节点下指定的key的值17 print(result3)
1 import configparser 2  3 #检查、删除、设置等操作方法 4 con = configparser.ConfigParser() 5 con.read("config.ini",encoding='utf-8') 6  7 #检查 8 test1 = con.has_section("com1") 9 print(test1)10 11 #添加节点12 con.add_section("add_test")13 con.write(open("config.ini",'w'))14 15 #删除节点16 con.remove_section("add_test")17 con.write(open("config.ini",'w'))18 19 20 #检查、删除、设置指定组内的键值对21 #检查22 test2 = con.has_option("com1","ip")23 print(test2)24 25 #删除26 test3 = con.remove_option("com1","ip")27 con.write(open("config.ini",'w'))28 29 #设置键值对30 con.set("add_test","k1","123")31 con.write(open("config.ini",'w'))
  • Shutil模块

1 #高级的文件、文件夹、压缩包处理。 2 Shutil.make_archive(base_name,format,…) 3 #创建压缩包并返回文件路径,例如:zip/tar 4 base_name: 压缩名的文件名,也可以是压缩包文件路径,只是文件名时,则保存至当前目录,否则保存至指定路径 5 如:www   =》保存至当前路径 6 如:/user/www =>保存至/user/ 7 format:压缩包种类, 8 root_dir:要压缩的文件夹路径(默认当前目录) 9 owner:用户,默认当前用户10 logger:用户记录日志,通常是logging.Logger对象11 import shutil,zipfile12 13 #将/user/load/test下的文件打包放置当前程序目录14 ret1 = shutil.make_archive("www",'tar',root_dir="/user/load/test")15 16 #将/user/load/test下的文件打包放置/user/yinjia/目录17 ret2 = shutil.make_archive("/user/yinjia/www",'tar',root_dir='/user/load/test')18 19 #将文件内容拷贝到另一个文件中20 shutil.copyfileobj(open("read.txt",'r'),open("page.xml",'a'))21 22 #拷贝文件23 shutil.copyfile("page.xml","pagecopy.xml")24 25 #仅拷贝权限、内容、组、用户均不变26 shutil.copymode("page.xml","pagecopy.xml")27 28 #拷贝状态的信息,包括:mode bits,atime,mtime,flags29 shutil.copystat('page.xml','pagecopy.xml')30 31 #拷贝文件和权限32 shutil.copy('page.xml','pagecopy.xml')33 34 #拷贝文件和状态信息35 shutil.copy2('page.xml','pagecopy.xml')36 37 #递归的去拷贝文件夹38 shutil.copytree('test1','test2',ignore=shutil.ignore_patterns('*.pyc','tmp'))39 shutil.copytree('test1','test2',symlinks=True,ignore=shutil.ignore_patterns('*.pyc','tmp'))40 41 #递归的去删除文件42 shutil.rmtree('test1')43 44 #递归去移动文件,类似mv命令,其实就是重命名45 shutil.move('test1','test2')46 47 #压缩48 z = zipfile.ZipFile("test.zip",'a')49 z.write('a.log')50 z.write('te.xml')51 z.close()52 53 #解压54 z = zipfile.ZipFile("test.zip",'r')55 z.extractall()56 z.close()57 #压缩58 tar = tarfile.open("test.tar","w")59 tar.add('/user/test/1.log',arcname='aa.log')60 tar.add("/user/test1/2.log",arcname='bb.log')61 tar.close()62 63 #压缩64 tar = tarfile.open("test1.tar",'r')65 tar.extractall() #可设置解压地址66 tar.close()
  • subprocess 模块

call 

执行命令,返回状态码

1 ret = subprocess.call(["ls", "-l"], shell=False)2 ret = subprocess.call("ls -l", shell=True)

 

check_call

执行命令,如果执行状态码是 0 ,则返回0,否则抛异常

1 subprocess.check_call(["ls", "-l"])2 subprocess.check_call("exit 1", shell=True)

 

check_output

执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常

1 subprocess.check_output(["echo", "Hello World!"])2 subprocess.check_output("exit 1", shell=True)

subprocess.Popen(...)

参数:

  • args:shell命令,可以是字符串或者序列类型(如:list,元组)
  • bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
  • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
  • preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
  • close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
    所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
  • shell:同上
  • cwd:用于设置子进程的当前目录
  • env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
  • universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
  • startupinfo与createionflags只在windows下有效
    将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等 
1 import subprocess2 ret1 = subprocess.Popen(["mkdir","t1"])3 ret2 = subprocess.Popen("mkdir t2", shell=True)
执行普通命令

终端输入的命令分为两种:

  • 输入即可得到输出,如:ifconfig
  • 输入进行某环境,依赖再输入,如:python
1 import subprocess2 3 obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
View Code
1 import subprocess 2  3 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) 4 obj.stdin.write("print(1)\n") 5 obj.stdin.write("print(2)") 6 obj.stdin.close() 7  8 cmd_out = obj.stdout.read() 9 obj.stdout.close()10 cmd_error = obj.stderr.read()11 obj.stderr.close()12 13 print(cmd_out)14 print(cmd_error)
View Code
1 import subprocess2 3 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)4 obj.stdin.write("print(1)\n")5 obj.stdin.write("print(2)")6 7 out_error_list = obj.communicate()8 print(out_error_list)
View Code
1 import subprocess2 3 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)4 out_error_list = obj.communicate('print("hello")')5 print(out_error_list)
View Code
  • logging模块

1、单文件日志

1 import logging 2    3    4 logging.basicConfig(filename='log.log', 5                     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s', 6                     datefmt='%Y-%m-%d %H:%M:%S %p', 7                     level=10) 8    9 logging.debug('debug')10 logging.info('info')11 logging.warning('warning')12 logging.error('error')13 logging.critical('critical')14 logging.log(10,'log')

日志等级

1 CRITICAL = 502 FATAL = CRITICAL3 ERROR = 404 WARNING = 305 WARN = WARNING6 INFO = 207 DEBUG = 108 NOTSET = 0

注:只有【当前写等级】大于【日志等级】时,日志文件才被记录。

2、多文件日志

如果想要设置多个日志文件,logging.basicConfig将无法完成,需要自定义文件和日志操作对象。

 

1 # 定义文件 2 file_1_1 = logging.FileHandler('l1_1.log', 'a', encoding='utf-8') 3 fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s") 4 file_1_1.setFormatter(fmt) 5  6 file_1_2 = logging.FileHandler('l1_2.log', 'a', encoding='utf-8') 7 fmt = logging.Formatter() 8 file_1_2.setFormatter(fmt) 9 10 # 定义日志11 logger1 = logging.Logger('s1', level=logging.ERROR)12 logger1.addHandler(file_1_1)13 logger1.addHandler(file_1_2)14 15 16 # 写日志17 logger1.critical('1111')
日志一

 

1 # 定义文件2 file_2_1 = logging.FileHandler('l2_1.log', 'a')3 fmt = logging.Formatter()4 file_2_1.setFormatter(fmt)5 6 # 定义日志7 logger2 = logging.Logger('s2', level=logging.INFO)8 logger2.addHandler(file_2_1)
日志二

如上述创建的两个日志对象

  • 当使用【logger1】写日志时,会将相应的内容写入 l1_1.log 和 l1_2.log 文件中
  • 当使用【logger2】写日志时,会将相应的内容写入 l2_1.log 文件中

 

转载于:https://www.cnblogs.com/yinjia/p/8597286.html

你可能感兴趣的文章
关于js传递问题
查看>>
MySQL工具汇总
查看>>
cookie
查看>>
如何使用Eclipse编译C,C++,JAVA程序
查看>>
手把手教如何搭建node+egg项目 引入Sequelize
查看>>
Xcode 4 with External Static Library for iPhone Development
查看>>
linux——常用命令清单
查看>>
JS 20180415作业
查看>>
项目追求更高的性能,更高的并发,更高的可用 (1)
查看>>
安卓 root权限笔记
查看>>
安卓 okhttp小结
查看>>
cocos2d-x 关于无法找到gl/gl.h头文件错误,以及r.java无法生成解决办法
查看>>
Mysql创建自动生成时间列方法
查看>>
12171131第一次作业
查看>>
[转] asp.net中repeater按钮传值与分页
查看>>
不变字典 NSDictionary
查看>>
编程中的runtime_error问题
查看>>
语音合成
查看>>
argparse
查看>>
Pandas使用to_csv保存中文数据用Excel打开是乱码
查看>>