Skip to main content

34.2. msvcrt —从MS VC++运行时的有用的例程


这些功能提供对Windows平台上一些有用功能的访问。一些更高级别的模块使用这些功能来构建其服务的Windows实现。例如,getpass 模块在实现 getpass() 功能时使用它。

有关这些功能的更多文档可以在Platform API文档中找到。

该模块实现控制台I/O API的正常和宽字符变量。普通API仅处理ASCII字符,并且对于国际化应用程序的使用有限。应尽可能使用宽字符API。

在 3.3 版更改: 此模块中的操作现在提高了 IOErrorOSError

34.2.1. 文件操作

msvcrt.locking(fd, mode, nbytes)

基于文件描述符 fd 从C运行时锁定文件的一部分。失败时提高 OSError。文件的锁定区域从 nbytes 字节的当前文件位置延伸,并且可以继续超出文件的结尾。 mode 必须是下面列出的 LK_* 常量之一。文件中的多个区域可以同时被锁定,但是可以不重叠。相邻区域不合并;它们必须单独解锁。

msvcrt.LK_LOCK
msvcrt.LK_RLCK

锁定指定的字节。如果字节不能被锁定,程序在1秒后立即再次尝试。如果在10次尝试之后,字节不能被锁定,则 OSError 被升高。

msvcrt.LK_NBLCK
msvcrt.LK_NBRLCK

锁定指定的字节。如果字节不能被锁定,则 OSError 被升高。

msvcrt.LK_UNLCK

解锁指定的字节,必须先前已锁定。

msvcrt.setmode(fd, flags)

设置文件描述符 fd 的行末翻译模式。要将其设置为文本模式,flags 应为 os.O_TEXT;对于二进制,它应该是 os.O_BINARY

msvcrt.open_osfhandle(handle, flags)

从文件句柄 handle 创建C运行时文件描述符。 flags 参数应该是 os.O_APPENDos.O_RDONLYos.O_TEXT 的按位或。返回的文件描述符可以用作 os.fdopen() 的参数以创建文件对象。

msvcrt.get_osfhandle(fd)

返回文件描述符 fd 的文件句柄。如果 fd 无法识别,则提高 OSError

34.2.2. 控制台I/O

msvcrt.kbhit()

如果键盘正在等待读取,则返回true。

msvcrt.getch()

读取按键并将结果字符作为字节字符串返回。没有回声到控制台。如果按键不可用,则此调用将阻止,但不会等待按下 Enter。如果按下的键是特殊功能键,则返回 '\000''\xe0';下一个调用将返回键码。使用此功能无法读取 Control-C 按键。

msvcrt.getwch()

getch() 的宽字符变量,返回Unicode值。

msvcrt.getche()

类似于 getch(),但是如果它代表一个可打印的字符,按键将被回显。

msvcrt.getwche()

getche() 的宽字符变量,返回Unicode值。

msvcrt.putch(char)

将字节字符串 char 打印到控制台而不缓冲。

msvcrt.putwch(unicode_char)

putch() 的宽字符变体,接受Unicode值。

msvcrt.ungetch(char)

导致字节串 char 被“推回”到控制台缓冲区;它将是 getch()getche() 读取的下一个字符。

msvcrt.ungetwch(unicode_char)

ungetch() 的宽字符变体,接受Unicode值。

34.2.3. 其他功能

msvcrt.heapmin()

强制 malloc() 堆清理自己并将未使用的块返回到操作系统。失败时,这会提高 OSError