Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > execute shell script from python, needs sys.argv

Reply
Thread Tools

execute shell script from python, needs sys.argv

 
 
Matt
Guest
Posts: n/a
 
      11-04-2010
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)

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)

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


 
Reply With Quote
 
 
 
 
Benjamin Kaplan
Guest
Posts: n/a
 
      11-04-2010
On Thu, Nov 4, 2010 at 11:37 AM, Matt <(E-Mail Removed)> 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
>

 
Reply With Quote
 
 
 
 
Peter Otten
Guest
Posts: n/a
 
      11-04-2010
Matt wrote:

> 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)
>
> 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)
>
> 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.


You could do it in two steps:

>>> from subprocess import *
>>> source = Popen(["cat", "/usr/share/dict/words"], stdout=PIPE)
>>> call(["wc"], stdin=source.stdout)

98569 98568 931708
0
>>>


A similar example is here, under a "can't miss" headline:

http://docs.python.org/library/subpr...shell-pipeline

Peter
 
Reply With Quote
 
Lawrence D'Oliveiro
Guest
Posts: n/a
 
      11-07-2010
In message <(E-Mail Removed)>, Tim Roberts wrote:

> I KNOW that we're still working on syntax here, and that it's too early
> for optimization, but it bothers me to see "cat" as the first thing in a
> pipeline.


An anti-UUOC instinct. Very good.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to execute a script from another script and other script does notdo busy wait. Rajat Python 3 01-08-2010 02:05 PM
RE: How to execute a script from another script and other script doesnotdo busy wait. VYAS ASHISH M-NTB837 Python 2 01-07-2010 08:18 PM
execute a shell script in a shell script moongeegee Perl Misc 2 12-04-2007 12:18 AM
execute a shell script from a python script spec Python 7 07-18-2006 06:55 PM
Execute shell script from a perl script kderaedt Perl Misc 3 06-26-2003 08:26 PM



Advertisments