Python Tutorial 第二章 使用Python解释器

本文介绍了如何使用Python解释器,包括启动解释器的不同方法、参数传递、错误处理、执行脚本及设置源程序编码等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2使用Python解释器

2.1调用解释器

Python解释器通常安装在/usr/local/bin/python路径下。把/usr/local/bin/python加入到Unix Shell的搜索路径中就可以在命令行中键入python来启动解释器。解释器的位置是一个安装选项,因此它可能在其它的位置。必要时询问你身边的Python专家或者系统管理员(/usr/local/python是另一个常见的安装路径)

Windows上,Python通常安装在C:/Python24[U1] ,但你可以在安装时改变这个路径。要把这个路径加入到你的path中,请在命令行窗口里执行以下命令:

Set path=%path;C:/python24

Python的提示符候输入一个文件结束符(Control-D on Unix and Control-Z on Windows)会使解释器退出并返回状态码0。如果文件结束符不起作用,你还可以执行命令”import sys;sys.quit()”来退出解释器。

 

解释器的行编辑功能通常并不是很强大。但在Unix上,安装了解释器就激活了GNU readline库的支持。该库加入了很多复杂的交互式编辑和历史纪录的功能。最快的检测命令行编辑是否支持的办法也许是在你遇到的第一个Python提示符候输入Control-P。如果听到嘟嘟响,就说明你可以使用命令行编辑。在附录A中可以看到关于这些编辑键的介绍。如果什么都没有发生或者显示了字母P,则表示命令行编辑功能不可用,你只能使用backspace从当前行删除字符。

解释器有些像UnixShell:当调用时的标准输入连接到一个tty设备时,交互的读入命令并执行。如果跟着一个文件名作为参数,或者以一个文件作为标准输入,则从该文件读入并执行脚本。

第二种启动解释器的办法是”python –c command [arg]…”。解释器会执行传入的命令,就像shell-c选项一样。因为Python的语句经常包含空格或者其它对shell有特殊意义的字符,最好把命令用双引号引起来。

一些Python模块也是很有用的脚本。可以用”python –m module [arg]…”的方式来调用。解释器会执行模块的源文件,就如同你在命令行上给出了模块的全名一样。

注意”python file””python <file”有一点区别。后一种方式程序需要的输入,如input()raw_input()的调用会从输入文件读。同时在程序执行以前解释器已经读到输入文件的末尾了,因此程序会立刻遇到一个end-of-file。在前一种情况下(通常是你希望的)输入从Python解释器标准输入相关联的任何文件或者设备读入。

当使用脚本文件时,有时需要在执行完脚本候进入交互模式。可以通过在脚本前加上-i达到这种效果。(当脚本从标准输入读入时该方法不起作用,和上一段解释的原因一样)

2.1.1 参数传递

脚本名称和附加的参数被放在sys.argv中传入脚本。sys.argv是一个字符串列表,长度最少为1。当没有脚本和参数传入时,sys.argv[0]是一个空串。当脚本名用’-‘指定时(表示标准输入),sys.argv[0]被置为’-‘。使用-m module选项时,sys.argv[0]被置为模块的全名。-c command -m module以后的选项不被Python解释器处理,而是作为sys.argv传给要执行的命令或模块。

2.1.2 交互模式

tty读入命令时,解释器处于交互模式。在这种模式下它用主提示符来提示用户输入下一个命令。主提示符通常是三个大于号(>>>”)。在一行输入没有终结需要在下一行继续输入时的副提示符缺省时三个点号(“…”)。解释器在输出第一个提示符前先输出一个包含了版本号和版权声明的欢迎信息。

python
Python 
   
    1.5.2
   b2 (#1, Feb 28 1999, 00:02:06)  [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, 
    
     
      Amsterdam
     
    
>>>
    
      
    

在输入一个多行结构时需要用到后继行。例如一个if语句:

>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
... 

小心不要被弄迷糊了。

2.2解释器及其环境

2.2.1 错误处理

一旦错误发生,解释器就会打印出错误信息和当前堆栈。在交互模式下会回到主提示符下。当输入来自文件,解释器在打印出堆栈信息候会退出并返回一个非零的错误码。(except语句捕获住的异常在这里不算错误)。有些错误是无条件的致命的,会导致以一个非零的错误码退出,通常由于内部的不一致和内存耗尽引起。所有的错误消息被写道标准错误流而命令中的正常输出写到标准输出。

在主提示符或副提示符下输入中断字符(通常是Control-C或者DEL)会取消输入并返回到主提示符。当命令正在执行时输入一个中断会引发一个KeyboardInterrupt异常。该异常可以被try语句捕获。

2.2.2 执行Python脚本

在类BSDUnix系统上,Python脚本可以像shell脚本一样直接执行。只需要在脚本开头加入下面这行:

#! /usr/bin/env python
并给脚本加上执行权限(这里假设Python解释器在用户的PATH参数中可以找到)。“#!”必须是文件的前两个字符。一些平台上第一行必须以Unix风格的换行符(“/n”)结束,而不是Mac OS上的“/r”或者Windows上的”/r/n”。请注意”#”表示Python中行注释的开始。
可以用chmod为脚本加上执行模式或权限
$ chmod +x myscript.py

   
    2.2.3
   源程序编码
可以在Python源程序中使用非ASCII的编码。最好的方式是紧接着#!开始的那行加上一行特殊注释以说明源代码的编码:

# -*- coding: encoding -*-

在这个声明下,所有源程序中的字符将会当作以encoding定的编码进行编码。还可以直接使用给定编码的Unicode字符串。可以在Python库参考中codec部分找到可用编码列表。
     
例如,为了写包含欧元符号的Unicode字符串可以制定ISO-8859-15编码。在这种编码中164对应着欧元符号。下面的脚本会打印出值8364(the Unicode codepoint corresponding to the Euro symbol[U2] )并退出。
# -*- coding: iso-8859-15 -*-
     
 currency = u"€"
     
 print ord(currency)
     
(译者注:我打出来的结果都是128,那位高手给指点一下,多谢)
     
如果你的编辑器支持把文件保存为含BOM标记的UTF8文件,你可以用它来替代编码声明。如果Option/General/DefaultEncoding/UTF-8设置了,IDLE就能支持这种编码。请注意这个标志在早期的Python版本中是不支持的(2.2或更早),带这种标志且以”#!”(只在Unix上使用)开始的脚本也不能被操作系统解释。(译者注:BOM是在UTF8或者Unicode文件头的几个标志字节,用来表示该文件是Unicode编码的。UnicodeBOM是字符U+FEFF,保存到文件中又和系统的BigEndian或者LittleEndian相关。UTF-8BOM是三个字节EF BB BF,具体可参见http://www.w3.org/International/questions/qa-utf8-bom )
     
通过使用UTF-8(BOM标志或者编码声明),世界上大多数语言的字符都能同时在字符串和注释中使用。但标识符中使用非ASCII字符还是不被允许的。为了正确显示所有这些字符,你的编辑器必须能够识别文件是UTF-8编码,并使用一种能支持文件中使用的所有语言的字体。
     

   
    2.2.4
   交互启动文件
     
当你以交互方式使用Python时,经常需要在每次解释器开始运行时手工执行一些标准命令。你可以通过把一个名为“PYTHONSTARTUP”的环境变量设置为包含有你想执行命令的脚本文件名就可以了。这和Unix shell中的.profile用法有些相似。
     
这个文件只在交互执行时会被读入,Python从脚本或者其它非tty模式读入命令时不被读入。它和交互输入的命令在同一个命名空间被执行。所以它定义或者import的对象可以直接在交互过程中被引用而不需要加限定符。你还可以在这个文件中修改提示符sys.ps1sys.ps2
如果你想从当前文件读入另一个附加的启动脚本,可以在全局启动脚本中加入这样的代码:"if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')"。如果你想在脚本中使用启动文件,必须明确的编码如下:
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    execfile(filename)

 [U1]译者注:后面的24是版本号,代表Python2.4.对于Python2.5缺省路径是C:/Python25

 [U2]这句话不懂,不敢乱翻译

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值