使用 Python 解释器

2. 使用 Python 解释器

2.1. 调用 Python 解释器

Python 解释器通常被安装在目标机器的 /usr/local/bin/python 目录下。 将 /usr/local/bin 目录包含进 Unix shell 的搜索路径里,以确保可以通过输入

python

命令来启动它。由于 Python 解释器的安装路径是可选的,这也可能是其他路径,你可以联系安装 Python 的用户或系统管理员确认。 (例如, /usr/local/python 就是一个常见的选择)

在 Windows 机器上,Python 通常安装在 C:\Python27 位置,当然你可以在运行安装向导时修改此值。 要想把此目录添加到你的 PATH 环境变量中,你可以在 DOS 窗口中输入以下命令

set path=%path%;C:\python27

通常你可以在主窗口输入一个文件结束符(Unix 系统是 Control-D ,Windows 系统是 Control-Z )让解释器以 0 状态码退出。 如果它不起作用,你可以通过输入 quit() 命令退出解释器。

Python 解释器具有简单的行编辑功能。 在 Unix 系统上,任何 Python 解释器都可能已经添加了 GNU readline 库支持,这样就具备了精巧的交互编辑和历史记录等功能。 在 Python 主窗口中输入 Control-P 可能是检查是否支持命令行编辑的最简单的方法。 如果发出嘟嘟声(计算机扬声器),则说明你可以使用命令行编辑功能;更多快捷键的介绍请参考 交互式输入行编辑历史回溯 。 如果没有任何声音,或者显示 ^P 字符,则说明命令行编辑功能不可用;你只能通过退格键从当前行删除已键入的字符并重新输入。

Python 解释器有些操作类似 Unix shell: 当使用终端设备 (tty) 作为标准输入调用时,它交互地解释并执行命令; 当使用文件名参数或以文件作为标准输入调用时,它读取文件并将文件作为脚本执行。

第二种启动 Python 解释器的方法是 python -c command [arg] ... ,这种方法可以在 命令行 执行 Python 语句,类似于 shell 中的 -c 选项。 由于 Python 语句通常会包含空格或其他特殊 shell 字符,一般建议将 命令 用单引号包裹起来。

有一些 Python 模块也可以当作脚本使用。 你可以使用 python -m module [arg] ... 命令来调用它们,这类似在命令行中键入完整的路径名执行 模块 源文件一样。

使用脚本文件时,经常会运行脚本然后进入交互模式。这也可以通过在脚本之前加上 -i 参数来实现。

2.1.1. 参数传递

调用解释器时,脚本名和附加参数传入一个名为 sys.argv 的字符串列表。你能够通过执行import sys 来获取这个列表,列表的长度大于等于1;没有给定脚本和参数时,它至少也有一个元素: sys.argv[0] 此时为空字符串。

脚本名指定为 '-' (表示标准输入)时, sys.argv[0] 被设定为 '-' ,使用 -c 指令 时,sys.argv[0] 被设定为 '-c' 。

使用 -m 模块 参数时, sys.argv[0] 被设定为指定模块的全名。-c 指令 或者 -m 模块 之后的参数不会被 Python 解释器的选项处理机制所截获,而是留在 sys.argv 中,供脚本命令操作。

2.1.2. 交互模式

从 tty 读取命令时,我们称解释器工作于 交互模式 。这种模式下它根据 主提示符 来执行,主提示符通常标识为三个大于号 (>>>);继续的部分被称为 从属提示符 ,由三个点标识 (...) 。在第一行之前,解释器打印欢迎信息、版本号和授权提示:

python

Python 2.7 (#1, Feb 28 2010, 00:02:06)

Type "help", "copyright", "credits" or "license" for more information.

<pre style="margin-top:.8pt;margin-right:0cm;margin-bottom:18.0pt;margin-left:0cm;
mso-line-height-alt:1.15pt;mso-pagination:widow-orphan"
>>>>

输入多行结构时需要从属提示符了,例如,下面这个 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)就会取消当前输入,回到主命令行。 [1] 执行命令时输入一个中断符会抛出一个 KeyboardInterrupt 异常,它可以被 try 语句截获。

2.2.2. 执行 Python 脚本

BSD 类的 Unix 系统中,Python 脚本可以像 Shell 脚本那样直接执行。只要在脚本文件开头写一行命令,指定文件和模式:

#! /usr/bin/env python

(首先要确认 Python 解释器在用户的 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 编码。 在此编码下,全世界大多数语言的字符可以同时用于字符串、标识符和注释中 — 尽管 Python 标准库仅使用 ASCII 字符做为标识符,这只是任何可移植代码应该遵守的约定。 如果要正确的显示所有的字符,你的编辑器必须能识别出文件是 UTF-8 编码,并且它使用的字体能支持文件中所有的字符。

你也可以为源文件指定不同的字符编码。 为此,在 #! 行(首行)后插入至少一行特殊的注释行来定义源文件的编码。:

# -*- coding: encoding -*-

通过此声明,源文件中所有的东西都会被当做用 encoding 指代的 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'): 
    execfile('.pythonrc.py') 

如果你想要在某个脚本中使用启动文件,必须要在脚本中写入这样的语句:

import  os
filename = os.environ.get('PYTHONSTARTUP')
if filename andos.path.is file(filename):
    exec(open(filename).read())

2.2.5. 本地化模块

Python 提供了两个钩子(方法)来本地化: sitecustomize 和 usercustomize. 为了见识它们, 你首先需要找到你的 site-packages 的目录. 启动 python 执行下面的代码:

>>>>import site
>>>site.getusersitepackages()'/home/user/.local/lib/python2.7/site-packages'

现在你可以在 site-packages 的目录下创建 usercustomize.py 文件,内容就悉听尊便了。 这个文件将会影响 python 的每次调用,除非启动的时候加入 -s 选项禁止自动导入。

sitecustomize 的工作方式一样, 但是是由电脑的管理账户创建以及在 usercustomize 之前导入。 具体可以参见 site 。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容