1.调用解释器

在Unix机器上,Python的解释器通常安装于/ usr/local/bin/python3.4 ,在这个目录/usr/local/ bin你也可以通过输入命令来启动它:

python3.4

当然,那只是一个安装选项,如果要改变请联系您安装Python的用户或系统管理员。(例如,在/ usr /local/python是一种很常见的选择。)

在Windows机器上,Python的安装通常是放在 C:\ Python34,你可以在运行安装程序进行更改。你可以把这个目录添加到环境变量path中,你可以键入以下命令进入命令提示符在DOS窗口:

set path=%path%;C:\python34

可以通过输入值(在Unix上键入文件结束的字符为Control-D,在Windows上按Ctrl-Z)让解释器以零退出状态。如果这样做不起作用,你可以通过键入以下命令:退出 quit()退出解释器 。

解释器的行编辑功能通常并不很复杂。在Unix上,安装的解释器可能已启用了GNU readline库支持,它增加了更多的精巧的交互编辑和历史记录功能。也许是最快的检查命令行编辑器是否支持输入控制,就是在第一个Python提示符按Ctrl-P。如果发出哔哔声,你可以使用命令行编辑功能,你可以查阅交互输入和历史替换,或者按^ P,查看命令行编辑行是否存在,你只能用退格键,从当前行删除字符。

解释器的操作有些像Unix Shell:当与标准输入连接到一个tty设备时,它会以交互方式读取并执行命令,当以一个文件名 ​​参数或以文件做为标准输入时,它读取文件并执行文件里的脚本。

启动解释器的第二个方法是 python -c command [arg] ...,这个执行语句的命令,等同于Shell的 -c选项。因为Python语句通常会把对空格或其他字符做特殊对待,如果命令行用引号通常使用单引号。

一些非常有用的Python模块通常用脚本编写。这些可以通过 python -m module [arg] ... 命令调用,执行源文件作为模板,前提是你在命令行上拼写对了文件全名。

脚本文件被使用时,交互模式是很有用的。在脚本之前,可以通过 passing -i

1 参数传递

在解释器中,脚本名和附加参数后都变成了一个字符串列表,在sys模式下分配给 argv的变量。您可以通过执行访问这个list 通过导入import sys。这个list的长度至少是1;在没有脚本没有参数时,sys.argv[0]是一个空字符串。当脚本名称被给定为 “ - ” (意思是标准输入),sys.argv中[0]被设置为- 。当 -c 命令执行时,sys.argv中[0]被设置为'-c' 。当 -m模块被使用时,sys.argv中[0] 被设置为本地模块的全名。在 -c 命令或-m模块后面的可选项,不会被Python解释器的选项处理,留在sys.argv中的命令或模块来处理。

2 交互模式

当从一个tty读取命令,解释器是处在交互模式下的。在这种模式下,它会提示一个符号输入下一个命令,通常是三个大于号(>>>);继续的部分用三个点(...)提示表示。在书写第一行时解释器会打印欢迎信息、版本号还有版权声明:

$ python3.4
Python 3.4 (default, Mar 16 2014, 09:25:04)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

当输入连续行时,继续行...是必须的。你可以看下面的if语句的列子:

>>> the_world_is_flat  =  True
>>> if the_world_is_flat :
...     print("Be careful not to fall off!")
...
Be careful not to fall off!

2.解释器及其环境

1 错误处理

当错误发生时,解释器打印一个错误信息和栈跟踪信息。在交互模式下,它返回主提示符,如果从文件输入进来,它会在打印栈跟踪器后以非零状态退出。(异常在try-except语句下处理了,不算错误)有些错误是无条件致命的,造成出口以非零退出,这可能由于内部矛盾和某些情况下运行内存溢出造成。所有的错误信息都写入标准错误流;其他的普通输出写入标准输出流。

输入中断符(通常是Control-CDEL),从主要或次要提示取消输入并返回到主提示符。[2] 输入一个中断,执行时会引发的 KeyboardInterrupt异常,它可以由一个try语句处理。

2 可执行的Python脚本

在BSD'ish Unix系统中,Python脚本可直接执行,就像shell脚本,如下:

#! /usr/bin/env python3.4

(假设解释器在用户的PATH上)在脚本开始之前,给该文件设置为可执行模式。#!必须是文件的前两个字符。在某些平台上,第一行必须以Unix风格的行结束符(\n )结尾,不是Windows结束符(\r\n )的行结束。需要注意的是哈希,或pound,字符,'#',是用来作为Python中的注释开始的。

该脚本可以得到一个可执行的模式,或许可使用 chmod 命令:

$ chmod +x myscript.py

在Windows系统中,没有“可执行模式”的概念。Python的安装程序python.exe会自动关联.py文件,所以可以作为一个脚本双击运行它。使用.pyw扩展也可以,在这种情况下,通常显示的控制台窗口被限制。

3 源代码编码方式

默认情况下,Python源文件的编码方式为UTF-8。在这种编码方式,世界上多少语音都可以同时使用在字符串、标识符和注释中, 虽然标准库只使用ASCII字符的标识符,但任何可移植的代码应该会遵循一个约定。为了正确显示所有的字符,你的编辑器必须认识到,该文件是UTF-8,并且必须使用支持文件中所有字符的字体。

它也可以指定源文件的编码不同。为了做到这一点,#!之后用一个特殊的注释行来定义源文件编码:

# -*- coding: encoding -*-

根据这个声明,一切在源文件中的代码,将被视为具有具体的编码,而不是默认为UTF-8。可能的编码列表可以在Python库参考手册中找到,可以参考codecs一节。

例如,如果您选择的编辑器不支持UTF-8编码的文件,并坚持使用一些其他的编码 Windows 1252,你可以这样写:

# -*- coding: cp-1252 -*-

仍然要在源文件中使用Windows-1252字符设置。那么必须在文件的第一或第二行内设置特殊编码注释。

4 交互式启动文件

当您使用Python的交互方式,在解释器启动时它常常有一些很方便的命令。你可以通过设置一个名为PYTHONSTARTUP的环境变量做到这一点,让包含你的启动的文件名称。这是类似.profile文件在Unix Shell中。

该文件只会在交互Session中读取,而不是使用Python从脚本中读取命令,也不 是使用/dev/tty作为外部命令源(否则就像一个交互式会话)。它执行在交互式命令相同的命名空间,所以它定义的对象还有导入的都不能在交互的Session外。您还可以更改提示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())

5 自定义模块

Python提供了两个钩子地方,让你实现自定义:sitecustomize和 usercustomize。看看它是如何工作的,你需要先找到你的 site-packages目录的位置。启动Python和运行此代码:

>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.2/site-packages'

现在你可以在该目录中创建一个文件名 ​为usercustomize.py,然后把你想要的任何东西写在里面。他会影响到Python的每次调用,除非在开始的时候采用 -s的选项来禁用自动导入。

sitecustomize的采用同样的方式,但通常是由计算机管理员在全局的site-packages目录创建,且在usercustomize导入之前。可以从site获取更多的信息。

脚注

[1] 在Unix上,Python 3.x的解释器在默认情况下不会以Python命名安装,因此它不会和同时安装Python 2.x的可执行文件相冲突。 [2] 使用GNU Readline软件包的一个问题可能会阻止这一点。