Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #17772
| Date | 2011-12-22 22:16 -0600 |
|---|---|
| From | Tim Chase <python.list@tim.thechases.com> |
| Subject | Idiom for shelling out to $EDITOR/$PAGER? |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.4014.1324613800.27778.python-list@python.org> (permalink) |
After a little searching, I've not been able to come up with what
I'd consider canonical examples of consider calling an external
editor/pager on a file and reading the results back in. (most of
my results are swamped by people asking about editors written in
Python, or what the best editors for Python code are)
The pseudocode would be something like
def edit_text(data):
temp_fname = generate_temp_name()
try:
f = file(temp_fname, 'w')
f.write(data)
f.close()
before = info(temp_fname) # maybe stat+checksum?
editor = find_sensible_editor()
subprocess.call([editor, temp_fname])
if before == info(temp_fname):
return None
else:
return file(temp_fname).read()
finally:
delete_if_exists(temp_fname)
However there are things to watch out for in this lousy code:
-race conditions, unique naming, and permissions on the temp file
-proper & efficient detection of file-change, to know whether the
user actually did anything
-cross-platform determination of a sensible editor (that blocks
rather than spawns), using platform conventions like
os.environ['EDITOR']
-cleanup deletion of the temp-file
I presume the code for spawning $PAGER on some content would look
pretty similar.
Any good example code (or blog posts, or other links) that has
been battle-tested?
Thanks,
-tkc
Back to comp.lang.python | Previous | Next — Next in thread | Find similar | Unroll thread
Idiom for shelling out to $EDITOR/$PAGER? Tim Chase <python.list@tim.thechases.com> - 2011-12-22 22:16 -0600 Re: Idiom for shelling out to $EDITOR/$PAGER? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2011-12-23 09:59 +0000
csiph-web