2.使用Python解释器

2.1调用解释器

Python解释器安装目录一般是/usr/local/bin/python3.3。将/usr/local/bin写入Unix shell的搜索路径,就可以在shell里输入命令“python3.3”启动解释器。(在Unix平台上,Python3.x解释器默认名字不是python,这样就不会与Python2.x冲突。)安装时可以选择解释器的安装目录,所有这个路径也可能在其它地方。可以用本地的Python guru或是让系统管理员检查一下。(/usr/local/python也是一个很常用的路径。)

Windows平台上,Python安装目录一般是C:\Python33,在安装的过程中同样可以变更安装目录。在DOS命令行中输入“set path=%path%;C:\python33”可将这个路径加入你的系统path中。

输入一个文件结尾符(Unix下为Control-D,windows下为Control-Z)可以让解释器以0值退出状态退出。如果快捷键不起作用,可以输入“quit()”命令来退出解释器。

解释器按行编辑的特性并不很复杂。在Unix平台,解释器可能得到GNU readline库的支持,从而得到复杂的交互式编辑和历史记录功能。在Python提示栏中输入Control-P可以快速检查命令行编辑是否支持。如果发出哔哔的声音,你可以使用命令行编辑功能。附录《交互式输入编辑和历史记录替换》中有更多快捷键的介绍。如果输入后什么都没发生,或者是P被打印出来的情况,命令行编辑的功能不能使用。你只能够删掉当前行的命令。

解释器的操作有点像Unix下的shell:在终端设备上用标准输入调用它,它会交互式地解读执行命令,相当于shell中的-c选项。由于Python的语句经常包含着shell下空格之类的特殊字符,用户最好在命令两端加单引号。

有的Python模块可以当做脚本使用。可以通过python -m modlue[arg] ...来调用模块。这就像在命令行里输出模块的全名执行模块的源代码一样。

使用一个脚本文件时,经常会运行脚本进入交互模式。可以在脚本前面加-i参数来实现。

2.1.1参数传递

对解释器来说,脚本的名字和附加的参数会转化成一个字符串列表,分配给sys模块的argv变量。执行import sys可以获取这个列表。没有给定脚本和参数的时候,列表还有一个元素sysy.argv[0],它是一个空字符串。当脚本的名字指定成‘-’(意味着标准输入),sys.argv[0]被设成了‘-’。使用-c的命令,sys.argv[0]被设成了‘-c’。-m模块被使用时,sys.argv[0]被设成了指定模块的全名。-c command和-m module之后的参数不会被Python编译器的选项处理机制截获,而是留在sys.argv中被命令或是模块处理。

2.1.2交互模式

当命令从终端读取,解释器处于交互模式。在这个模式中,它根据主提示符来执行,主提示符的标识是“>>>”,其后的部分称为从提示符,标识为“...”。第一行前面,解释器打印出一条带有版本号的欢迎信息和版权信息,如下:

 

$ python3.3
Python 3.3 (py3k, Sep 12 2007, 12:21:02)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

 

输入多行结构需要从提示符。举个例子,观察一下这个if语句:

 

>>> the_world_is_flat = 1

 

>>> if the_world_is_flat:

 

...    print("Be careful not to fall off!")

 

...

 

Be careful not to fall off!

 

2.2解释器及其环境

 

2.2.1错误处理

 

一个错误发生时,解释器打印一条错误消息和栈跟踪器。在交互模式下,它返回到主提示符。如果从文件输入执行,打印出栈跟踪器后解释器带着一个非零退出状态退出。(异常可以由一个try语句中的except子句处理,这样上下文就不会有错误信息。)一些致命错误会导致非零状态退出,一般是由内部矛盾和内存泄露引起。所有错误信息都写入标准错误流,命令中执行的普通输出写入标准输出。

 

在主提示符或从提示符中输入中断符(Control-C或DEL)会取消输入,返回主输入符(GNU readline 包的一个bug可能会造成它无法正常工作)。执行命令时输入中断符会引发一个KeyboardInterrupt异常,用try语句来截获它。

 

2.2.2可执行Python脚本

 

在BSD类Unix系统中,Python脚本像shell脚本一样是可以直接执行的,只需在脚本开头输入“#! /usr/bin/env python3.3”指定文件和运行模式(确保解释器在用户Path里)。#!必须是文件的头两个字符。在某些平台,文件第一行必须以Unix类型的‘\n’结束,而不是windows的‘\r\n’。注意,‘#’是Python中行注释的起始符。

 

脚本可以通过chmod命令指定执行模式和权限。命令如下:“$ chmod +x myscript.py”。

 

在windows系统里,没有执行模式这一说法。Python安装程序自动将.py后缀的文件与python.exe关联起来。所以,只要双击Python文件就可以作为脚本运行。后缀名也可以是.pyw,这种情况下控制台窗口打开通常会被阻止。

 

2.2.3源程序编码

 

Python源文件默认为UTF-8编码进行处理。使用UTF-8编码,我们可以在字符串、变量命名和注释中使用世界上的大部分语言。可移植代码需要遵循惯例:标准库只是用ASCII字符集。为了正确地显示所有的字符,你的编辑器需要将Python源文件识别为UTF-8编码,同时还需要一种支持文件中所有字符的字体。

 

通过定义,也可以使用别的编码方式代替UTF-8。可选编码方式名单可以在Python库的引用中找到,在codecs那一节。

 

如果你的编辑器不支持UTF-8编码的文件,只能使用别的编码格式。比如说Windows-1252,写上“# -*- coding: cp-1252 -*-”,你就可以在源文件中使用Windows-1252字符集。这条编码指定命令必须卸载文件的第一行或第二行。

 

2.2.4交互式的启动文件

 

使用 Python 解释器的时候,我们可能需要在每次解释器启动时执行一些命令。你可以设定一个叫PYTHONSTARTUP环境变量,变量值是包含启动命令的文件名。这类似于 Unix shell的 .profile 文件。

 

包含启动命令的文件在交互式会话下是只读的,当Python从脚本里读取命令或以终端/dev/tty做为外部命令源时则不会如此(尽管它们的行为很像是处在交互会话)。交互式命令与解释器执行的命令处在同一个命名空间,所以它定义或引用的对象无需验证就可以在交互式会话使用。你也可以在文件中改变sys.ps1和sys.ps2指令。

 

如果想从当前目录执行附加的启动文件,可以在全局启动文件中使用像这样的代码“if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())”执行。如果想在脚本中使用启动文件,需要在脚本中明确地写到:

 

import os

 

filename = os.environ.get('PYTHONSTARTUP')

 

if filename and os.path.isfile(filename):

 

    exec(open(filename).read())

 

2.2.5定制的模块

 

Python提供两个定制的方法:站点定制与用户定制。

 

用户定制的步骤是,首先需要找到用户站点包(user site-packages)路径位置。启动Python执行以下程序:“ >>> import site>>> site.getusersitepackages()'/home/user/.local/lib/python3.2/site-packages' ”。接着在该目录下创建一个名为usercustomize.py的文件,写入需要的代码。这个文件会影响Python调用过程,除非启动命令使用-s的选项禁用自动引用(import)。

 

站点定制(sitecustomiz文件e)也是同样的工作原理。在全局站点包(site-packages)路径用管理员身份创建一个在用户定制之前引用的文件。查看站点模块文件(28.13 站点——站点配置方法)获得更多信息。