使用Python进行Curses编程 作者: A.M。Kuchling,Eric S. Raymond 发布: 2.04 Abstract 本文档描述了如何使用curses扩展模块来控制文本模式显示 什么是curses? curses库为基于文本的终端提供了一个独立于终端的屏幕绘画和键盘处理设施;这些终端包括VT100,Linux控制台和各种程序提供的模拟终端。显示终端支持各种控制代码,以执行常见操作,例如移动光标,滚动屏幕和擦除区域。不同的终端使用各种不同的代码,往往有自己的小怪癖. 在图形显示的世界中,人们可能会问“为什么要打扰”?字符单元显示终端是一种过时的技术,但是有一些利基可以做出奇

支持循环垃圾收集 Python对检测和收集涉及循环引用的垃圾的支持需要来自对象类型的支持,对象类型是其他对象的“容器”,也可以是容器。不存储对其他对象的引用或仅存储对原子类型(如数字或字符串)的引用的类型不需要为garbagecollection提供任何显式支持. 要创建容器类型,类型对象的tp_flags字段必须包含Py_TPFLAGS_HAVE_GC并提供tp_traverse处理程序的实现。如果该类型的实例是可变的,那么tp_clear还必须提供实现. Py_TPFLAGS_HAVE_GC 具有此标志集的类型的对象必须符合此处记录的规则。为方便起见,这些对象将被称为容器对象. 容器类型的

公共对象结构 在Python的对象类型的定义中使用了大量结构。本节描述了这些结构及其使用方法. 所有Python对象最终在对象在内存中的表示开头共享少量字段。它们由PyObject和PyVarObject类型表示,它们又由一些宏的扩展定义,无论是直接还是间接地在所有其他Python对象的定义中使用. PyObject 所有对象类型都是此类型的扩展名。这是一种包含Python将对象指针作为对象处理的信息的类型。在正常的“发布”版本中,它只包含对象的引用计数和指向相应类型对象的指针。实际上没有声明为PyObject,但每个Python对象都可以转换为PyObject*。访问主题必须使用宏Py_RE

弱引用对象 Python支持weak references作为第一类对象。有两种特定的对象类型直接实现弱引用。第一个是简单的参考对象,第二个作为原始对象的代理,尽可能地 // PyWeakref_Check( ob ) 如果ob是引用或代理对象,则返回true . int PyWeakref_CheckRef( ob ) 如果ob是参考对象,则返回true. int PyWeakref_CheckProxy( ob ) 如果ob是代理对象,则返回true。 PyObject* PyWeakref_NewRef( PyObject  *ob,PyObject *callback) Return

类型对象   PyTypeObject 用于描述内置类型的对象的C结构. PyObject* PyType_Type 这是类型对象的类型对象;它与Python层中的type是同一个对象. int PyType_Check( PyObject  *o) 如果对象o是一个类型对象,则返回true,包括从中派生的类型的实例标准类型对象。在所有其他情况下返回假. int PyType_CheckExact( PyObject  *o) 如果对象o是一个类型对象,但不是标准类型对象的子类型,则返回true。在所有其他情况下返回false . nsigned int PyType_ClearCa

对象协议 PyObject * Py_NotImplemented NotImplemented单例,用于表示对给定类型组合没有实现操作. Py_RETURN_NOTIMPLEMENTED 正确处理返回Py_NotImplemented来自一个C函数(也就是说,增加NotImplemented的引用计数并返回它). int PyObject_Print( PyObject  *o,文件 *fp,int  flags) 打印一个物品o,存档fp。错误时返回-1。flags参数用于启用某些打印选项。目前支持的唯一选择是Py_PRINT_RAW;如果给出,对象的str()写的不是repr(). in

引用计数 本节中的宏用于管理Python对象的引用计数 void Py_INCREF( PyObject  *o) 增加对象o的引用计数。对象不能是NULL;如果你不确定它不是NULL,请使用Py_XINCREF(). void Py_XINCREF( PyObject  *o) 增加对象o的引用计数。对象可能是NULL,在这种情况下宏没有效果. void Py_DECREF( PyObject  *o) 减少对象o的引用计数。对象不能是NULL;如果你不确定它不是NULL,请使用Py_XDECREF()。如果referencecount达到零,则调用对象的类型的释放函数(不能是NULL).

简介 应用程序程序员的Python接口使C和C ++程序员可以在各种级别访问Python解释器。API可以与C ++同等地使用,但为了简洁起见,它通常被称为Python / CAPI。使用Python / C API有两个根本不同的原因。第一个原因是为特定目的写扩展模块;这些是扩展Python解释器的C模块。这可能是最常用的。第二个原因是使用Python作为大型应用程序中的一个组件;这种技术通常被称为嵌入 Pythonin一个应用程序. 编写扩展模块是一个相对容易理解的过程,其中“烹饪书”方法很有效。有几种工具可以在一定程度上自动化过程。虽然人们在早期存在的过程中将Python嵌入到其他应用程

fcntl– fcntl和ioctl系统调用 该模块对文件描述符执行文件控制和I / O控制。它是fcntl()和ioctl() Unix例程的接口。有关这些调用的完整描述,请参见fcntl(2)和ioctl(2) Unix手册页. 本模块中的所有函数都将文件描述符fd作为其第一个参数。这可以是整数文件描述符,例如sys.stdin.fileno()返回的,或io.IOBase对象,例如sys.stdin本身,它提供fileno()返回一个真正的filedescriptor. 在版本3.3中更改:这个模块中的操作用于提升IOError他们现在提取OSError. 该模块定义了以下内

posix– 最常见的POSIX系统调用 该模块提供对C标准和POSIX标准(一种伪装的Unix接口)标准化的操作系统功能的访问. 不要直接导入该模块.而是导入模块os,它提供了这个界面的portable版本。在Unix上,os模块提供了posix接口的超集。在非Unix操作系统上posix模块不可用,但通过os接口始终可以使用子集。一旦导入os,使用它而不是no会有posix性能损失。此外,os提供了一些额外的功能,比如当putenv()中的条目改变时自动调用os.environ. 错误报告为例外;对于类型错误给出了常见的异常,而系统调用报告的错误提高了OSError. &nbs