python 11期 第六天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 11期 第六天相关的知识,希望对你有一定的参考价值。

常用内置模块

一、json/pickle串

1、json

不同的语言之间进行数据交换,不同程序的内存数据交换。

和xml类似。


import json


a={

    ‘db‘:[1,‘wang‘],

    ‘home‘:[‘zhang‘,45],

    ‘host‘:{‘name‘:‘ting‘,‘age‘:24}

}


#将json写入文件

my_json=json.dumps(a)

f=file(‘data.txt‘,‘wb‘)

f.write(my_json)


#从文件中读取json

af2=file(‘data.txt‘,‘rb‘)

af=af2.read()

json_data=json.loads(af)

af2.close()


dumps和loads是在程序中使用,dump和load可以直接写入文件,和从文件中加载。


2、pickle


import pickle

a={

    ‘db‘:[1,‘wang‘],

    ‘home‘:[‘zhang‘,45],

    ‘host‘:{‘name‘:‘ting‘,‘age‘:24}

}

#将字典数据pickle化写入文件

f=file(‘pickle1.txt‘,‘w‘)

pickle.dump(a,f)

#从文件中读取pickle的数据:

f=file(‘pickle1.txt‘,‘r‘)

pickle2=pickle.load(f)

print ‘===>‘,pickle2


pickle可以序列化大部分的python数据结构,包括时间格式、类、函数等。


备注:将windows下的文件传入linux中的时候,也就是说跨平台传文件 的时候,用python打开文件时候官方推荐用‘rb‘或‘wb‘的方式。如:file(‘/tmp‘,‘rb‘)


二、系统相关的模块

执行系统命令:

os.system()  #只返回执行状态

os.spawn*

os.popen()  #可以返回执行结果,但将被废弃

即将废弃的模块(该模块不适合在windows上使用,会出错):

commands

commands.getoutput(‘dir‘)  #获取命令的结果

commands.getstatus(‘dir‘)  #获取命令的执行状态

commands.getstatusoutput() #返回结果和状态


三、subprocess

以上被废弃的模块都被此模块代替:subprocess

subprocess.call([‘dir‘],shell=True)  #直接执行命令,无返回结果


#以下命令会把执行结果返回给变量

cmd2=subprocess.check_output([‘dir‘],shell=True)

print cmd2


check_call是在命令执行错误的时候会抛异常,在执行成功的时候和call一样。

cmd2=subprocess.check_call([‘dir‘],shell=True)


Popen类似于os.popen:

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()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

以下是一些例子:

import subprocess

ret1 = subprocess.Popen(["mkdir","t1"])

ret2 = subprocess.Popen("mkdir t2", shell=True)

------------------------------------------------------------------------------

obj = subprocess.Popen("mkdir t3", shell=True, cwd=‘/home/dev‘,)

-------------------------------------------------------------------------------

import subprocess

-----------------------------------------------------------------------------------------

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

obj.stdin.write(‘print 1 \n ‘)

obj.stdin.write(‘print 2 \n ‘)

obj.stdin.write(‘print 3 \n ‘)

obj.stdin.write(‘print 4 \n ‘)

obj.stdin.close()


cmd_out = obj.stdout.read()

obj.stdout.close()

cmd_error = obj.stderr.read()

obj.stderr.close()


print cmd_out

print cmd_error

--------------------------------------------------------------------------------

import subprocess


obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

out_error_list = obj.communicate(‘print "hello"‘)

print out_error_list

##

本文出自 “Linux天地” 博客,谢绝转载!

以上是关于python 11期 第六天的主要内容,如果未能解决你的问题,请参考以下文章

学习python的第六天

Python的第六天

python第六天

20200104--python学习第六天

第六天

python学习第六天