cliutils 0.1.1 released: Working directory decorator factory
written by Ian McCracken
at Saturday, September 27, 2008
Came up with a handy decorator factory:
Notice that it'll change back to the original directory upon the completion of the function.
Download from Google Code or pypi. Upgrade or install anew with
@indir
. Say you want a shell script to execute in a different working directory—for example, you want to do complex config file manipulation, or batch operations on a lot of files, or you just don't want to pass absolute paths all the time. Just decorate the function in question with @indir(workdir)
, where workdir
is the directory to which you want to change:
>>> import tempfile
>>> realpath = os.path.realpath
>>> new, cur = map(realpath, (tempfile.mkdtemp(), os.curdir))
>>> @indir(new)
... def whereami():
... return realpath(os.curdir)
...
>> whereami() == new
True
>>> realpath(os.curdir) == cur
True
Notice that it'll change back to the original directory upon the completion of the function.
Download from Google Code or pypi. Upgrade or install anew with
easy_install -U cliutils
. API docs are here.
September 27, 2008 at 5:32 PM
This is a useful set of utilities. However, I think that the log_decorator is misnamed. It has nothing to do with the logging module. It is really just temporarily redirecting stdout to some other file-like object, and logging.Loggers are not file-like objects. It should be called a redirect_decorator, and @redirect.
September 27, 2008 at 7:54 PM
That's a good point. I was originally going to work on some abstraction of the logging module, or something, but you're right, I think redirect makes more sense. I'll rename it in the next micro.
November 25, 2021 at 5:20 PM
Great reading