일부 예는 다음을 사용하여 파일 열기 with open(filename) as fp:
하여 잠금을 획득 with lock:
(여기서 lock
인스턴스이다 threading.Lock
). 의 contextmanager
데코레이터를 사용하여 자체 컨텍스트 관리자를 구성 할 수도 있습니다 contextlib
. 예를 들어, 현재 디렉토리를 일시적으로 변경 한 다음 원래 위치로 돌아 가야 할 때 자주 사용합니다.
from contextlib import contextmanager
import os
@contextmanager
def working_directory(path):
current_dir = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(current_dir)
with working_directory("data/stuff"):
# do something within data/stuff
# here I am back again in the original working directory
여기에 일시적으로 리디렉션 또 다른 예입니다 sys.stdin
, sys.stdout
및 sys.stderr
다른 파일 핸들 나중에 복원을하기 :
from contextlib import contextmanager
import sys
@contextmanager
def redirected(**kwds):
stream_names = ["stdin", "stdout", "stderr"]
old_streams = {}
try:
for sname in stream_names:
stream = kwds.get(sname, None)
if stream is not None and stream != getattr(sys, sname):
old_streams[sname] = getattr(sys, sname)
setattr(sys, sname, stream)
yield
finally:
for sname, stream in old_streams.iteritems():
setattr(sys, sname, stream)
with redirected(stdout=open("/tmp/log.txt", "w")):
# these print statements will go to /tmp/log.txt
print "Test entry 1"
print "Test entry 2"
# back to the normal stdout
print "Back to normal stdout again"
마지막으로, 임시 폴더를 만들어 컨텍스트를 떠날 때 정리하는 또 다른 예는 다음과 같습니다.
from tempfile import mkdtemp
from shutil import rmtree
@contextmanager
def temporary_dir(*args, **kwds):
name = mkdtemp(*args, **kwds)
try:
yield name
finally:
shutil.rmtree(name)
with temporary_dir() as dirname:
# do whatever you want
with
에 Python 3 설명서가 있습니다.