execute shell script from python, needs sys.argv

Benjamin Kaplan benjamin.kaplan at case.edu
Thu Nov 4 12:06:17 EDT 2010


On Thu, Nov 4, 2010 at 11:37 AM, Matt <macmanes at 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
>



More information about the Python-list mailing list