On Thu, Nov 4, 2010 at 11:37 AM, Matt <macma...@gmail.com> wrote: > Hi All, > > I am trying to execute a shell script from within python.. This shell > script takes the format, where $1 and $2 are variables from the > command line: cat $1 | Fastx_trimmer -n COUNT -o $2 > > straight into the cmd line it would be: cat file.1 | Fastx_trimmer -n > COUNT -o file.2 > > So, know that there is a way to do this in python using the > subprocess module, but despite a lot of effort, I can't seem to get > this to work, and precisely because of those arguments taken from the > command line. > > I was thinking that the easiest thing to so was to > > import sys, os, subprocess > proc = subprocess.call([cat sys.argv[1] | fastx_trimmer -n COUNT -o > sys.argv[2]], shell=True) >
Python is not the shell. Shell commands are not python commands. You need either a string or a list of strings, so any literal have to be in quotes. Also, subprocess can't handle the redirection. You need to run it as two commands. proc1 = subprocess.Popen(["cat", sys.argv[1]],stdout = subprocess.PIPE, shell = True) proc2 = subprocess.Popen(["fastx_trimmer", "-n", "COUNT", "-o", sys.argv[2]],stdin=proc1.stdout, shell=True) > this clearly does not work... > > alternatively, I could put the shell command in its own file, say > fastx.sh, and pass it's arguments to it vie the command line. > > import sys, os, subprocess > proc = subprocess.call([fastx.sh, sys.argv[1], sys.argv[2]], > shell=True) > Again, you need a string. fastx.sh looks for a python object called fastx and tries accessing an attribute called sh in that object. Ov course, there's no such thing. Put quotes around it and it will work. > But, this does not seem to work as this is not the proper way to pass > arguments to the shell script. > > in short, I'm sure that this is a easy fix, but given my still limited > python vocabulary, it eludes me. > > Thanks, Matt > > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list