<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C08BQnk6eip7ImA9WxJUFE0.&quot;"><id>tag:blogger.com,1999:blog-5440028356946346379</id><updated>2009-07-12T08:30:53.712-04:00</updated><title>Doug Hellmann</title><subtitle type="html">&lt;p&gt;Code Interstices&lt;/p&gt;

&lt;p&gt;All the little things that happen between bouts of coding.  Covering internet technologies, Python, Mac OS X, and open source.&lt;/p&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.doughellmann.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.doughellmann.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5440028356946346379/posts/default?start-index=4&amp;max-results=3&amp;redirect=false&amp;v=2" /><author><name>Doug Hellmann</name><uri>http://www.blogger.com/profile/01892352754222143463</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>332</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>3</openSearch:itemsPerPage><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><link rel="self" href="http://feeds.feedburner.com/DougHellmann" type="application/atom+xml" /><feedburner:emailServiceId>DougHellmann</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;C08BQnk5fyp7ImA9WxJUFE0.&quot;"><id>tag:blogger.com,1999:blog-5440028356946346379.post-7271361590908411245</id><published>2009-07-12T08:30:00.001-04:00</published><updated>2009-07-12T08:30:53.727-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-12T08:30:53.727-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="PyMOTW" /><title>PyMOTW: File Access</title><content type="html">&lt;div class="section" id="file-access"&gt;&lt;span id="article-file-access"&gt;&lt;/span&gt;&lt;h1&gt;File Access&lt;/h1&gt;&lt;p&gt;Python&amp;#8217;s standard library includes a large range of tools for working with files, filenames, and file contents.&lt;/p&gt;&lt;div class="section" id="filenames"&gt;&lt;h2&gt;Filenames&lt;/h2&gt;&lt;p&gt;The first step in working with files is to get the name of the file so you can operate on it.  Python represents filenames as simple strings, but provides tools for building them from standard, platform-independent, components in &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;os.path&lt;/span&gt;&lt;/tt&gt;.  List the contents of a directory with &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;listdir()&lt;/span&gt;&lt;/tt&gt; from &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;os&lt;/span&gt;&lt;/tt&gt;, or use &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;glob&lt;/span&gt;&lt;/tt&gt; to build a list of filenames from a pattern.  Finer grained filtering of filenames is possible with &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;fnmatch&lt;/span&gt;&lt;/tt&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="meta-data"&gt;&lt;br /&gt;&lt;h2&gt;Meta-data&lt;/h2&gt;&lt;p&gt;Once you know the name of the file, you may want to check other characteristics such as permissions or the file size using &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;os.stat()&lt;/span&gt;&lt;/tt&gt; and the constants in &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;stat&lt;/span&gt;&lt;/tt&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="reading-files"&gt;&lt;h2&gt;Reading Files&lt;/h2&gt;&lt;p&gt;If you&amp;#8217;re writing a filter application that processes text input line-by-line, &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;fileinput&lt;/span&gt;&lt;/tt&gt; provides an easy framework to get started.  The fileinput API calls for you to iterate over the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;input()&lt;/span&gt;&lt;/tt&gt; generator, processing each line as it is yielded.  The generator handles parsing command line arguments for file names, or falling back to reading directly from &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;sys.stdin&lt;/span&gt;&lt;/tt&gt;.  The result is a flexible tool your users can run directly on a file or as part of a pipeline.&lt;/p&gt;&lt;p&gt;If your app needs random access to files, &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;linecache&lt;/span&gt;&lt;/tt&gt; makes it easy to read lines by their line number.  The contents of the file are maintained in a cache, so be careful of memory consumption.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="temporary-files"&gt;&lt;h2&gt;Temporary Files&lt;/h2&gt;&lt;p&gt;For cases where you need to create scratch files to hold data temporarily, or before moving it to a permanent location, &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;tempfile&lt;/span&gt;&lt;/tt&gt; will be very useful.  It provides classes to create temporary files and directories safely and securely.  Names are guaranteed not to collide, and include random components so they are not easily guessable.&lt;/p&gt;&lt;/div&gt;&lt;div class="section" id="files-and-directories"&gt;&lt;h2&gt;Files and Directories&lt;/h2&gt;&lt;p&gt;Frequently you need to work on a file as a whole, without worrying about what is in it.  The &lt;tt class="xref docutils literal"&gt;&lt;span class="pre"&gt;shutil&lt;/span&gt;&lt;/tt&gt; module includes high-level file operations such as copying files and directories, setting permissions, etc.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.doughellmann.com/PyMOTW/"&gt;PyMOTW Home&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The &lt;a class="reference external" href="http://www.doughellmann.com/PyMOTW/articles/file_access.html"&gt;canonical version&lt;/a&gt; of this article&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5440028356946346379-7271361590908411245?l=blog.doughellmann.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=pRdUnTwYNyg:vG4YvTrYNgE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=pRdUnTwYNyg:vG4YvTrYNgE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=pRdUnTwYNyg:vG4YvTrYNgE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=pRdUnTwYNyg:vG4YvTrYNgE:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=pRdUnTwYNyg:vG4YvTrYNgE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=pRdUnTwYNyg:vG4YvTrYNgE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=pRdUnTwYNyg:vG4YvTrYNgE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=pRdUnTwYNyg:vG4YvTrYNgE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=pRdUnTwYNyg:vG4YvTrYNgE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DougHellmann/~4/pRdUnTwYNyg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.doughellmann.com/feeds/7271361590908411245/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5440028356946346379&amp;postID=7271361590908411245" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5440028356946346379/posts/default/7271361590908411245?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5440028356946346379/posts/default/7271361590908411245?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DougHellmann/~3/pRdUnTwYNyg/pymotw-file-access.html" title="PyMOTW: File Access" /><author><name>Doug Hellmann</name><uri>http://www.blogger.com/profile/01892352754222143463</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="00116818175230541568" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.doughellmann.com/2009/07/pymotw-file-access.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04GSX09eip7ImA9WxJVGEU.&quot;"><id>tag:blogger.com,1999:blog-5440028356946346379.post-1835715432958838692</id><published>2009-07-06T08:05:00.001-04:00</published><updated>2009-07-06T08:05:28.362-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-06T08:05:28.362-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Book Review: IronPython in Action</title><content type="html">&lt;iframe src="http://rcm.amazon.com/e/cm?t=hellflynet-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=1933988339&amp;md=10FE9736YVPPT7A0FBG2&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;float:left;margin-right:1em;margin-bottom:1em;" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;IronPython in Action&lt;/strong&gt; by Michael Foord and Christian Muirhead covers the version of Python built to run on Microsoft's CLR and explains how to use it with the .NET framework.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Disclaimer: I received a review copy of this book from Manning through the PyATL Book Club.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There are two target audiences for this book: experienced Python developers wanting to learn .NET, and experienced .NET developers wanting to learn Python.  Both groups will find plenty of interesting material and learn a lot.  After some relatively basic introductory chapters, the authors dig right in building a complex GUI application, and then implementing a web interface for the same desktop application.  &lt;br /&gt;&lt;br /&gt;Along the way they introduce topics such as different programming models in Python, navigating the MSDN documentation (very important for understanding the scope of features available in .NET), packaging your app for distribution under Windows, data persistence, XML parsing, design patterns, automated testing, system administration, relational databases, and &lt;em&gt;two separate&lt;/em&gt; GUI libraries.  &lt;br /&gt;&lt;br /&gt;All of the code is clear, concise, and useful -- there are no fluffy, throw-away code snippets that fall short in the real world.  While many of the examples given are specific to IronPython or .NET, the techniques being illustrated are definitely not.&lt;br /&gt;&lt;br /&gt;I recommend this book for any Windows developer interested in learning about Python, and for Python developers looking into deploying an application under Windows.  If you don't fall into either of those groups, I can still recommend that you pick up a copy for some excellent advice on general programming topics and the solid example code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5440028356946346379-1835715432958838692?l=blog.doughellmann.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=RjK3-RlFI3E:NQLknC_GHTU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=RjK3-RlFI3E:NQLknC_GHTU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=RjK3-RlFI3E:NQLknC_GHTU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=RjK3-RlFI3E:NQLknC_GHTU:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=RjK3-RlFI3E:NQLknC_GHTU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=RjK3-RlFI3E:NQLknC_GHTU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=RjK3-RlFI3E:NQLknC_GHTU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=RjK3-RlFI3E:NQLknC_GHTU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=RjK3-RlFI3E:NQLknC_GHTU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DougHellmann/~4/RjK3-RlFI3E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.doughellmann.com/feeds/1835715432958838692/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5440028356946346379&amp;postID=1835715432958838692" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5440028356946346379/posts/default/1835715432958838692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5440028356946346379/posts/default/1835715432958838692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DougHellmann/~3/RjK3-RlFI3E/book-review-ironpython-in-action.html" title="Book Review: IronPython in Action" /><author><name>Doug Hellmann</name><uri>http://www.blogger.com/profile/01892352754222143463</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="00116818175230541568" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.doughellmann.com/2009/07/book-review-ironpython-in-action.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEGQX46fSp7ImA9WxJVGE0.&quot;"><id>tag:blogger.com,1999:blog-5440028356946346379.post-3102098936979012700</id><published>2009-07-05T09:30:00.001-04:00</published><updated>2009-07-05T09:30:20.015-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-05T09:30:20.015-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="PyMOTW" /><title>New command line interface to PyMOTW</title><content type="html">The &lt;a href="http://www.doughellmann.com/projects/PyMOTW/"&gt;1.95 release of PyMOTW&lt;/a&gt; includes a command line interface to access the documentation for a module.  &lt;br /&gt;&lt;br /&gt;The package can be installed via easy_install or pip:&lt;br /&gt;&lt;br /&gt;&lt;div class="syntax"&gt;&lt;pre&gt;$ pip install PyMOTW&lt;br /&gt;Downloading/unpacking PyMOTW&lt;br /&gt;  Downloading PyMOTW-1.95.tar.gz (2.2Mb): 2.2Mb downloaded&lt;br /&gt;  Running setup.py egg_info for package PyMOTW&lt;br /&gt;    warning: no files found matching 'ChangeLog'&lt;br /&gt;    warning: no files found matching '*.py' under directory 'sphinx/templates'&lt;br /&gt;    no previously-included directories found matching 'utils'&lt;br /&gt;Installing collected packages: PyMOTW&lt;br /&gt;  Running setup.py install for PyMOTW&lt;br /&gt;    changing mode of build/scripts-2.6/motw from 644 to 755&lt;br /&gt;    warning: no files found matching 'ChangeLog'&lt;br /&gt;    warning: no files found matching '*.py' under directory 'sphinx/templates'&lt;br /&gt;    no previously-included directories found matching 'utils'&lt;br /&gt;    changing mode of /Users/dhellmann/.virtualenvs/testpymotw/bin/motw to 755&lt;br /&gt;Successfully installed PyMOTW&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;and then to use the command line interface, run &lt;code&gt;motw&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="syntax"&gt;&lt;pre&gt;$ motw -h&lt;br /&gt;Usage: motw [options] &lt;module_name&gt;&lt;br /&gt;&lt;br /&gt;Options:&lt;br /&gt;  -h, --help  show this help message and exit&lt;br /&gt;  -t, --text  Print plain-text version of help to stdout&lt;br /&gt;  -w, --web   Open HTML version of help from web&lt;br /&gt;  --html      Open HTML version of help from installed file&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;For example, &lt;code&gt;motw abc&lt;/code&gt; opens the local version of &lt;a href="http://blog.doughellmann.com/2009/07/pymotw-abc-abstract-base-classes.html"&gt;this week's article&lt;/a&gt;.  You can also use the "-w" option to go to my web site instead of reading the local version, so you always have the latest version of an article.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5440028356946346379-3102098936979012700?l=blog.doughellmann.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=GyMEOtJNpRc:ZhP1SVJCDWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=GyMEOtJNpRc:ZhP1SVJCDWc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=GyMEOtJNpRc:ZhP1SVJCDWc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=GyMEOtJNpRc:ZhP1SVJCDWc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=GyMEOtJNpRc:ZhP1SVJCDWc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=GyMEOtJNpRc:ZhP1SVJCDWc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=GyMEOtJNpRc:ZhP1SVJCDWc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DougHellmann?a=GyMEOtJNpRc:ZhP1SVJCDWc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DougHellmann?i=GyMEOtJNpRc:ZhP1SVJCDWc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DougHellmann/~4/GyMEOtJNpRc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.doughellmann.com/feeds/3102098936979012700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=5440028356946346379&amp;postID=3102098936979012700" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5440028356946346379/posts/default/3102098936979012700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5440028356946346379/posts/default/3102098936979012700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DougHellmann/~3/GyMEOtJNpRc/new-command-line-interface-to-pymotw.html" title="New command line interface to PyMOTW" /><author><name>Doug Hellmann</name><uri>http://www.blogger.com/profile/01892352754222143463</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="00116818175230541568" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.doughellmann.com/2009/07/new-command-line-interface-to-pymotw.html</feedburner:origLink></entry></feed>
