day6 模块 shutil shelve subprocess hashlib logging

http://www.cnblogs.com/wupeiqi/articles/4963027.html

http://www.cnblogs.com/alex3714/articles/5161349.html

详细在两位大王的博客内

shutil模块

高级的文件 文件夹 压缩包 处理模块

shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容

shutil.copyfile(src, dst)
拷贝文件

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copy(src, dst)
拷贝文件和权限

shutil.copy2(src, dst)
拷贝文件和状态信息、

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件

例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

shutil.move(src, dst)
递归的去移动文件

 

 

shelve 模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式,只有一个open方法

在一个序列化的文件内dump重复dump N次,读的时候只需记住key

 

subprocess

 

 

 

 

 

logging

用于便捷记录日志且线程安全的模块

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

对于等级:

1
2
3
4
5
6
7
8
CRITICAL  =  50
FATAL  =  CRITICAL
ERROR  =  40
WARNING  =  30
WARN  =  WARNING
INFO  =  20
DEBUG  =  10
NOTSET  =  0

只有大于当前日志等级的操作才会被记录。

对于格式,有如下属性可是配置:

day6 模块 shutil shelve subprocess hashlib logging_第1张图片\

\

 

 

 

 

subprocess

五、执行系统命令 

可以执行shell命令的相关模块和函数有:

  • os.system
  • os.spawn*
  • os.popen*          --废弃
  • popen2.*           --废弃
  • commands.*      --废弃,3.x中被移除
import commands

result = commands.getoutput('cmd')
result = commands.getstatus('cmd')
result = commands.getstatusoutput('cmd')

以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。

call 

执行命令,返回状态码

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

shell = True ,允许 shell 命令是字符串形式

check_call

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

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

check_output

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

1
2
subprocess.check_output([ "echo" "Hello World!" ])
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()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
  执行普通命令

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

  • 输入即可得到输出,如:ifconfig
  • 输入进行某环境,依赖再输入,如:python
  View Code
  View Code
  View Code
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
>>> ret = subprocess.call("dir", shell=True)
 驱动器 C 中的卷没有标签。
 卷的序列号是 103A-09ED

 C:\Users\Administrator.aa-PC\PycharmProjects\untitled 的目录

2016/03/05  14:07    <DIR>          .
2016/03/05  14:07    <DIR>          ..
2016/03/04  22:43    <DIR>          .idea
2016/03/04  22:46    <DIR>          day6
2016/03/05  13:20    <DIR>          day7
2016/03/05  13:35               286 shelve_mod.py
2016/03/05  13:35                69 shelve_test.bak
2016/03/05  13:31             1,578 shelve_test.dat
2016/03/05  13:35                 0 shelve_test.dir
2016/03/05  14:07                52 shelve_txt.bak
2016/03/05  13:36             1,068 shelve_txt.dat
2016/03/05  14:07                52 shelve_txt.dir
2016/03/05  13:35    <DIR>          __pycache__
               7 个文件          3,105 字节
               6 个目录 66,482,196,480 可用字节
>>>

 

你可能感兴趣的:(day6 模块 shutil shelve subprocess hashlib logging)