subprocess.popen function with quotes

skunkwerk skunkwerk at gmail.com
Wed Mar 26 14:44:21 CET 2008


On Mar 25, 11:04 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Wed, 26 Mar 2008 02:15:28 -0300, skunkwerk <skunkw... at gmail.com>  
> escribió:
>
>
>
> > On Mar 25, 9:25 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
> > wrote:
> >> En Wed, 26 Mar 2008 00:39:05 -0300, skunkwerk <skunkw... at gmail.com>  
> >> escribió:
>
> >> >>    i'm trying to call subprocess.popen on the 'rename' function in
> >> >> linux.  When I run the command from the shell, like so:
>
> >> >> rename -vn 's/\.htm$/\.html/' *.htm
>
> >> >> it works fine... however when I try to do it in python like so:
> >> >> p = subprocess.Popen(["rename","-vn","'s/\.htm$/
> >> >> \.html/'","*.htm"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>
> >> >> print p.communicate()[0]
>
> >> >> nothing gets printed out (even for p.communicate()[1])
>
> >> I'd try with:
>
> >> p = subprocess.Popen(["rename", "-vn", r"'s/\.htm$/\.html/'", "*.htm"],
> >>        stdout=subprocess.PIPE, stderr=subprocess.PIPE,
> >>        shell=True)
>
> >> (note that I added shell=True and I'm using a raw string to specify the  
> >> reg.expr.)
>
> > Thanks Gabriel,
> >    I tried the new command and one with the raw string and single
> > quotes, but it is still giving me the same results (no output).  any
> > other suggestions?
>
> My next try would be without the single quotes...
>
> --
> Gabriel Genellina

thanks for the input guys,
  I've tried the suggestions but can't get it to work.  I have a file
named test.htm in my directory, and when I run the following command:

rename -vn 's/(.*)\.htm$/model.html/' *.htm

from the shell in that directory I get the following output:
test.htm renamed as model.html

now my python script is called test.py, is located in the same
directory, and is called from the shell with 'python test.py'
the contents of test.py:
import subprocess

p = subprocess.Popen(['rename','-vn','s/(.*)\.htm$/
model.html/','*.htm'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print p.communicate()[0]

i change to print p.communicate()[1] in case the output is blank the
first time

this is the output:
*.htm renamed as model.html

when I add shell=True to the subprocess command, I get the following
output:
Usage: rename [-v] [-n] [-f] perlexpr [filenames]

am i doing something wrong?



More information about the Python-list mailing list