Difference between revisions of "Python starter script"

From Noah.org
Jump to navigationJump to search
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[Category:Engineering]]
 
[[Category:Engineering]]
 
[[Category:Python]]
 
[[Category:Python]]
 +
[[Category:Free_Software]]
 +
 
== My starter template for a Python CLI script ==
 
== My starter template for a Python CLI script ==
  
This is my quintessential Python starter script.
+
This is my quintessential Python starter template for command-line scripts. This is a elaborate hello world that I use whenever I start a new script.
This is what I use to start most of my python scripts.
 
This is geared toward a command-line script.
 
  
<pre class="code">
+
What inspired this is that whenever I wrote a shell script I always found myself going back to add readline support; then getopt arg parsing; then exception handling; then help documentation, etc... I'd always end up with this hello world script at the core. So what I did was pull this out and make it pretty.
#!/usr/bin/env python
 
  
"""This describes how to use the script.  
+
To make this even more useful I have Vim use this as a template for new Python files. I added the following lines to my .vimrc:
This docstring will be printed by exit_with_usage()
 
if there is a problem or if the user requests help (-?, --help, etc.).
 
  
$Id$
+
<pre>
"""
+
augroup BufNewFileFromTemplate
 
+
au!
import sys, os, traceback
+
autocmd BufNewFile * silent! 0r $HOME/.vim/templates/%:e.tpl
import re
+
autocmd BufNewFile * normal! G"_dd1G
import getopt
+
autocmd BufNewFile * silent! match Todo /TODO/
import time
+
augroup BufNewFileFromTemplate
from pexpect import run, spawn
+
</pre>
 
 
def exit_with_usage ():
 
    print globals()['__doc__']
 
    os._exit(1)
 
  
def parse_args (options='', long_options=[]):
+
Then I put this script in a file named:
    try:
+
  ~/.vim/templates/py.tpl
        optlist, args = getopt.getopt(sys.argv[1:], options+'h?', long_options+['help','h','?'])
+
Now whenever I start a new Python script Vim will automatically copy this template into my buffer.
    except Exception, e:
 
        print str(e)
 
        exit_with_usage()
 
    options = dict(optlist)
 
    if [elem for elem in options if elem in ['-h','--h','-?','--?','--help']]:
 
        exit_with_usage()
 
    return (options, args)
 
  
def main ():
+
Click to download: [http://www.noah.org/engineering/src/dotfiles/.vim/templates/py.tpl py.tpl]
    (options, args) = parse_args('v')
+
<include src="/home/noahspurrier/noah.org/engineering/src/dotfiles/.vim/templates/py.tpl" highlight="python" />
    # if args<=0:
 
    #    exit_with_usage()
 
    if '-v' in options:
 
        verbose = True
 
    else:
 
        verbose = False
 
    # TODO: Do something
 
 
 
if __name__ == '__main__':
 
    try:
 
        start_time = time.time()
 
        print time.asctime()
 
        main()
 
        print time.asctime()
 
        print "TOTAL TIME IN MINUTES:",
 
        print (time.time() - start_time) / 60.0
 
        sys.exit(0)
 
    except SystemExit, e:
 
        raise e
 
    except Exception, e:
 
        print 'ERROR, UNEXPECTED EXCEPTION'
 
        print str(e)
 
        traceback.print_exc()
 
        os._exit(1)
 
</pre>
 

Latest revision as of 16:57, 26 May 2011


My starter template for a Python CLI script

This is my quintessential Python starter template for command-line scripts. This is a elaborate hello world that I use whenever I start a new script.

What inspired this is that whenever I wrote a shell script I always found myself going back to add readline support; then getopt arg parsing; then exception handling; then help documentation, etc... I'd always end up with this hello world script at the core. So what I did was pull this out and make it pretty.

To make this even more useful I have Vim use this as a template for new Python files. I added the following lines to my .vimrc:

augroup BufNewFileFromTemplate
au!
autocmd BufNewFile * silent! 0r $HOME/.vim/templates/%:e.tpl
autocmd BufNewFile * normal! G"_dd1G
autocmd BufNewFile * silent! match Todo /TODO/
augroup BufNewFileFromTemplate

Then I put this script in a file named:

 ~/.vim/templates/py.tpl

Now whenever I start a new Python script Vim will automatically copy this template into my buffer.

Click to download: py.tpl <include src="/home/noahspurrier/noah.org/engineering/src/dotfiles/.vim/templates/py.tpl" highlight="python" />