The msvcrt Module
(Windows/DOS only) The msvcrt module gives you access to a number of functions in the Microsoft Visual C/C++ Runtime Library (MSVCRT).
Example 12-13 demonstrates the getch function reading a single keypress from the console.
Example 12-13. Using the msvcrt Module to Get Key Presses
File: msvcrt-example-1.py import msvcrt print "press 'escape' to quit..." while 1: char = msvcrt.getch() if char == chr(27): break print char, if char == chr(13): print press 'escape' to quit... h e l l o
The kbhit function returns true if a key has been pressed (which means that getch won't block), as shown in Example 12-14.
Example 12-14. Using the msvcrt Module to Poll the Keyboard
File: msvcrt-example-2.py import msvcrt import time print "press SPACE to enter the serial number" while not msvcrt.kbhit() or msvcrt.getch() != " ": # do something else print ".", time.sleep(0.1) print # clear the keyboard buffer while msvcrt.kbhit(): msvcrt.getch() serial = raw_input("enter your serial number: ") print "serial number is", serial press SPACE to enter the serial number . . . . . . . . . . . . . . . . . . . . . . . . enter your serial number: 10 serial number is 10
The locking function in Example 12-15 can be used to implement cross-process file locking under Windows.
Example 12-15. Using the msvcrt Module for File Locking
File: msvcrt-example-3.py
import msvcrt
import os
LK_UNLCK = 0 # unlock the file region
LK_LOCK = 1 # lock the file region
LK_NBLCK = 2 # non-blocking lock
LK_RLCK = 3 # lock for writing
LK_NBRLCK = 4 # non-blocking lock for writing
FILE = "counter.txt"
if not os.path.exists(FILE):
file = open(FILE, "w")
file.write("0")
file.close()
for i in range(20):
file = open(FILE, "r+")
# look from current position (0) to end of file
msvcrt.locking(file.fileno(), LK_LOCK, os.path.getsize(FILE))
counter = int(file.readline()) + 1
file.seek(0)
file.write(str(counter))
file.close() # unlocks the file
print os.getpid(), "=>", counter
time.sleep(0.1)
208 => 21
208 => 22
208 => 23
208 => 24
208 => 25
208 => 26
Категории