Python基础(十):Python交互式输入行编辑历史回溯
某些版本的 Python 解释器支持编辑当前的输入行和历史记录,类似于在 Korn shell 和 GNU Bash shell 中看到的功能。这是使用 GNU Readline 库实现的,它支持各种编辑风格。 这个库有它自己的文档,在这里我们不就重复了。
14.1. Tab 补全和历史记录
变量和模块名的补全在解释器启动时 自动打开 以便 Tab 键调用补全功能;它会查看Python语句的名字,当前局部变量以及可以访问的模块名。对于点分表达式如 string.a,它将求出表达式最后一个 '.' 之前的值,然后根据结果的属性给出补全的建议。注意,如果一个具有 __getattr__() 方法的对象是表达式的某部分,这可能执行应用程序定义的代码。默认的配置同时会把历史记录保存在你的用户目录下一个名为 .python_history 的文件中。在下次与交互式解释器的回话中,历史记录将还可以访问。
14.2. 其它交互式解释器
与早期版本的解释器相比,现在是向前巨大的进步;然而,有些愿望还是没有实现:如果能对连续的行给出正确的建议就更好了(解析器知道下一行是否需要缩进)。补全机制可以使用解释器的符号表。检查(或者只是建议)匹配的括号、 引号的命令等也会非常有用。
一个增强的交互式解释器是 IPython,它已经存在相当一段时间,具有 tab 补全、 对象 exploration 和高级的历史记录功能。它也可以彻底定制并嵌入到其他应用程序中。另一个类似的增强的交互式环境是 bpython。
附:
1. 交互模式
1.1. 错误处理
当错误发生时,解释器打印一个错误信息和堆栈跟踪。在交互模式下,它返回主提示符;当输入来自文件的时候,在打印堆栈跟踪后以非零退出状态退出。(在 try 声明中被 except 子句捕捉到的异常在这种情况下不是错误。)有些错误是非常致命的会导致一个非零状态的退出;这也适用于内部错误以及某些情况的内存耗尽。所有的错误信息都写入到标准错误流;来自执行的命令的普通输出写入到标准输出。
输入中断符(通常是 Control-C 或者 DEL)到主或者从提示符中慧取消输入并且返回到主提示。[1]当命令执行中输入中断符会引起 KeyboardInterrupt 异常,这个异常能够被一个 try 声明处理。
1.2. 可执行 Python 脚本
在 BSD’ish Unix 系统上,Python 脚本可直接执行,像 shell 脚本一样,只需要把下面内容加入到
#!/usr/bin/env python3.5
(假设 python 解释器在用户的 PATH 中)脚本的开头,并给予该文件的可执行模式。#! 必须是文件的头两个字符。在一些系统上,第一行必须以 Unix-style 的行结束符('\n')结束,不能以 Windows 的行结束符('\r\n')。 注意 '#' 在 Python 中是用于注释的。
使用 chmod 命令能够给予脚本执行模式或者权限。
$ chmod +x myscript.py
在 Windows 系统上,没有一个 “可执行模式” 的概念。Python 安装器会自动地把 .py 文件和python.exe 关联起来,因此双击 Python 分拣将会把它当成一个脚本运行。文件扩展名也可以是.pyw,在这种情况下,运行时不会出现控制台窗口。
1.3. 交互式启动文件
当你使用交互式 Python 的时候,它常常很方便地执行一些命令在每次解释器启动时。你可以这样做:设置一个名为 PYTHONSTARTUP 的环境变量为包含你的启动命令的文件名。这跟 Unix shells 的 .profile 特点有些类似。
这个文件在交互式会话中是只读的,在当 Python 从脚本中读取命令,以及在当 /dev/tty 被作为明确的命令源的时候不只是可读的。该文件在交互式命令被执行的时候在相同的命名空间中能够被执行,因此在交互式会话中定义或者导入的对象能够无需授权就能使用。你也能在文件中更改提示sys.ps1 和 sys.ps2。
如果你想要从当前目录中读取一个附加的启动文件,你可以在全局启动文件中编写代码像这样:if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())。如果你想要在脚本中使用启动文件的话,你必须在脚本中明确要这么做:
import osfilename = os.environ.get('PYTHONSTARTUP')if filename and os.path.isfile(filename): with open(filename) as fobj: startup_file = fobj.read() exec(startup_file)
1.4. 定制模块
Python 提供两个钩子为了让你们定制 sitecustomize 和 usercustomize。为了看看它的工作机制的话,你必须首先找到你的用户 site-packages 目录的位置。启动 Python 并且运行这段代码:
>>> import site>>> site.getusersitepackages()'/home/user/.local/lib/python3.4/site-packages'
现在你可以创建一个名为 usercustomize.py 的文件在你的用户 site-packages 目录,并且在里面放置你想要的任何内容。它会影响 Python 的每一次调用,除非它以 -s (禁用自动导入)选项启动。