On Thu, Apr 22, 2010 at 11:28 AM, J <dreadpiratej...@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 -- http://mail.python.org/mailman/listinfo/python-list