Difference between Popen and open() for reading a file

Chris Rebert clp2 at rebertia.com
Thu Apr 22 14:47:44 EDT 2010


On Thu, Apr 22, 2010 at 11:28 AM, J <dreadpiratejeff at gmail.com> wrote:
> I was reading something from a code review a little while ago and saw
> something that's got my curiosity up...
>
> Say I had a file, foo.txt that I wanted to read from, only one time
> and only read.
>
> So what's the difference between this:
>
> mylist = Popen(["cat","foo.txt"], stdout=PIPE).communicate()[0].splitlines()
>
> and this:
>
> f = open('foo.txt')
> mylist = f.readlines()
> f.close
>
> Is there a reason why you would not use subprocess.Popen for this,
> other than just not relying on external programs to perfrom the task?
>
> what if that file only has one line in it, and that's all you're
> interested in, and the file is guaranteed to only have that one line
> it it?
>
> For example:
>
> say foo.txt contained only the number 123456789
>
> what's wrong with doing this:
>
> my_int = int(commands.getoutput('cat foo.txt')
>
> or via the subprocess.Popen method mentioned above?

- Unnecessary complexity; I don't think anyone can credibly argue the
versions that use cat are simpler than the just-read-the-file-directly
version
- Unnecessary dependency (Does Windows have cat? I honestly don't know.)
- Pointless waste of CPU time; the versions invoking cat are slower
and there is no corresponding reward for enduring the decrease in
performance
- Bad error reporting; if foo.txt is nonexistent, the cat-free version
will give you a nice juicy IOError with full traceback, whereas the
cat versions will just silently give you an empty string

In other words, why *would* you want to use cat for this? The versions
using it have absolutely no benefits that I can find over the cat-free
code.

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list