Python学习笔记17

执行命令:

在Python中可以执行两种对象,一种是Python对象,一种是非Python对象:

可调用的Python对象:

内建函数BIF:

     BIF的属性:

     如:int(), open(), file(), raw_input(), dir()等

              bif.__doc__:文档字符串

              bif.__name__:文档名称字符串

              bif.__self__:为None

              bif.__module__:存放bif的模块名称(或为None)

用户定义函数UDF:

UDF 属性           描述

udf.__doc__     文档字符串(也可以用 udf.func_doc)

udf.__name__    字符串类型的函数名字(也可以用 udf.func_name)

udf.func_code    字节编译的代码对象

udf.func_defaults    默认的参数元组

udf.func_globals  全局名字空间字典; 和从函数内部调用 globals(x)一样

udf.func_dict      函数属性的名字空间

udf.func_doc      (见上面的 udf.__doc__)

udf.func_name     (见上面的 udf.__name__)

udf.func_closure  包含了自由变量的引用的单元对象元组

内建方法BIM:Python内建数据类型也包含一些方法。例如:列表对象的内建方法:

list.append(), list.pop()等。

自定义方法:UDM: 自定义类实例(对象)的方法。

类调用: 通过<类名>() 方式调用类,返回该类的一个实例。

对象调用:通过<对象名>()方式调用对象,返回对象的__call__()方法调用结果。如果在类中实现了特殊方法__call__(),则该类的对象是可调用的。

代码对象:Python中执行代码时,将被执行的代码封装成一个对象,称为代码对象。代码对象可以是一行代码也可是多行代码。事实上真正意义上的代码对象是代码编译后的字节代码序列。Python通过代码对象来管理被执行的代码。提供了四个内建函数,命令:

callable(), compile(), eval(),exec来操作代码对象。

callable(obj): 如果obj可调用则返回True,否则返回False.

compile(code_string,file, type):将一段代码编译为代码对象。code_string是Python代码,file是存放代码的地方,type是要生成的代码对象的类型:

          ’eval’  求值表达式生成的代码对象由eval()函数调用;

        ‘single’ 一条可执行语句生成的代码对象由exec命令调用;

    ‘exec’ 多条代码生成的代码对象由exec命令调用。

eval(obj, gloable, local): 对obj进行求值并返回求值结果,obj可以是代码字符串,也可以是代码对象。 gloablelocal分别是全局和局部命名空间 --- 这个概念有待深入分析。

exec obj: obj可以是一行或多行代码组成的字符串,也可以是编译好的代码对象。

例:

exec """

... x = 0

... print 'x is currently:', x

... while x < 5:

...  x += 1

...  print 'incrementing x to:', x

... """

input()和raw_input()

input() = eval(raw_input())

raw_input()将键盘输入原样以字符串格式返回,input则可以对键盘输入的内容求值,然后返回求值结果。

Python模块被导入时最高级的代码(没有缩进的代码)会被执行一次。

Best prectice: 在最高级代码中加入判断语句,判断当前模块是在被导入还是在被调用,如果是在被导入则全局变量__name__是模块名,如果是被调用则全局变量名__name__ 是’__main__’。那么如何处理那些不想每次导入都执行的代码呢?缩进它,并放入 if __name__ == '__main__' 的内部。

因为存放python代码的文件(.py文件)是可执行的。exec命令也可以用来执行python脚本文件。obj也可以是一个python文件对象。先得到python脚本文件的句柄(文件对象),然后把文件对象传给exec命令。

>>> f =open('xcount.py') # open the file

>>> exec f  # execute the file

另一种执行python脚本文件的方法是execfile(<filename>,globals=globals(), locals=locals())函数。类似 eval(),globals 和 locals 都是可选的,如果不提供参数值的话,默认为执行环境的名字空间,而在某些情况下,可能需要用不同全局和局部的名字空间集合。

执行操作系统命令,或执行操作系统上的可执行文件(外部程序)。

Python 的os模块提供了相应的方法来调用操作系统的可执行程序。

os模块:

os.system(cmd): 执行cmd字符串指向的程序,等待结束后返回结果(windows环境永远返回0)

os.execl( file, argo, …, argn): 用参数列表arg0 ,,, argn等执行文件file.

os.popen(‘cmd string’, accessmod):像os.system一样执行程序,并把返回的结果当作一个文件打开并返回文件句柄,通过该文件句柄可以访问返回的内容。例:

>>> import os

>>> f = os.popen('uname-a')

>>> data = f.readline()

>>> f.close()

>>> print data,

Linux solo 2.2.13 #1 Mon Nov 815:08:22 CET 1999 i586 unknown

subprocess 模块:

call()方法类似与os.system()方法。

创建Popen()实例的语法只比调用 os.popen()函数复杂了一点

subprocess提供了Popen类提供了相应的面向进程的函数。

>>> from subprocessimport Popen, PIPE

>>> f = Popen(('uname','-a'), stdout=PIPE).stdout

>>> data = f.readline()

>>> f.close()

>>> print data,

退出程序执行:

sys.exit(status=0): 执行该函数会引发systemExit()异常。

sys.exitfunc() sys.exit()函数的一部分。可以重载该函数,以便在退出时执行额外的清理工作。重载该函数的示例:

import sys

prev_exit_func = getattr(sys,'exitfunc', None)

def my_exit_func(old_exit =prev_exit_func):

# :

# perform cleanup  进行清理

# :

if old_exit is not None andcallable(old_exit):

old_exit()  

sys.exitfunc = my_exit_func

os.kill(PID,SIGNAL):进程清理函数

os 模块的 kill()函数模拟传统的 unix 函数来发送信号给进程。kill()参数是进程标识数(PID)

和你想要发送到进程的信号。发送的典型信号为 SIGINT, SIGQUIT,或更彻底地,SIGKILL,来使进程终结。

os模块还提供其他很多的接口来访问操作系统信息。

其他执行相关的模块:

模块                    描述

atexit     注册当 python 解释器退出时候的执行句柄

popen2  提供额外的在 os.popen 之上的功能:(提供通过标准文件和其他的进程交  互

的能力;对于 python2.4 和更新的版本,使用 subpross) commands  提供额外的在 os.system 之上的功能:把所有的程序输出保存在返回的字符串中(与输出到屏幕的相反);对于 python2.4 和更新的版本,使用 subpross

getopt                在这样的应用程序中的处理选项和命令行参数

site               处理 site-specific 模块或包

platform     底层平台和架构的属性

subprocess 管理(计划替代旧的函数和模块,比如 os.system(),os.spawn*(), os.popen*(), popen2.*, command.*)

猜你喜欢

转载自blog.csdn.net/z54572/article/details/64129075