I've been remiss in not mentioning the new alternative in 3.3 for
handling nesting of complex context management stacks:
with contextlib.ExitStack() as cm:
p1 = cm.enter_context(open('/etc/passwd'))
p2 = cm.enter_context(open('/etc/passwd'))
(Note: ExitStack is really intended for cases where the number of
context managers involved varies dynamically, such as when you want to
make a CM optional, but you *can* use it for static cases if it seems
appropriate)