On 28 June 2010 18:39, Michael Torrie <torr...@gmail.com> wrote: > On 06/28/2010 05:48 AM, Dave Pawson wrote: >> Main queries are: Ease of calling out to bash to use something like >> imageMagick or Java? Ease of grabbing return parameters? E.g. convert >> can return both height and width of an image. Can this be returned to >> the Python program? Can Python access the exit status of a program? > > Sure. I've created a module called runcmd that does 90% of what I want > (easy access to stdout, stderr, error code). I've attached it to this > e-mail. Feel free to use it; this post puts my code into the public domain.
Thanks Michael. > >> I'd prefer the advantages of using Python, just wondering if I got so >> far with the port then found it wouldn't do something? > > Python really isn't a shell scripting language. So there are things > that Bash does much better, such as spawning processes and piping them > together. I've tried over the years to create a pythonic library that > would let me do that, but haven't found a good syntax that I like. I'm using xml quite a bit and tried xmlsh which does the job but has what I think of as irregular syntax? Bash is fine for smaller scripts, but I had to be really careful by the time I got to around 1200 loc. Hence my preference for Python. > > It turns out, though, that much of what I use piping for in Bash is to > run external processes to do things that I could use python modules for. I kept thinking that.. Then I had to use Java/Python for some plain old calculations, so it kept nagging me that a cleaner approach would be a single language. > Sure it's a couple more lines in this case, but in other cases, python's > abilities make it simpler than bash. A great document on how you can > exploit python's abilities (particularly generators) to replace bash > pipelines is here: http://www.dabeaz.com/generators/ Thanks for the reference. I'm nearly there with the mix of return codes and output values, using subprocess. p1 = subprocess.Popen(['identify', '-format' , '%[fx:w]' , f ], stdout=subprocess.PIPE) resp1= p1.communicate() #print dir(p1) p2 = subprocess.Popen(['identify', '-format' , '%[fx:h]' , f ], stdout=subprocess.PIPE) resp2= p2.communicate() if (p1.returncode or p2.returncode): print "Error ",p1.returncode sys.exit(2) else: width=int(resp1[0]) height=int(resp2[0]) print "Height %s, width %s " % (height, width) Not happy with the error handling yet, but this was the bit that I thought I'd struggle with. regards -- Dave Pawson XSLT XSL-FO FAQ. Docbook FAQ. http://www.dpawson.co.uk -- http://mail.python.org/mailman/listinfo/python-list