Hi,
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 think the problem is the quoted string the rename command wants -
when I put it in triple quotes like """s/\.htm$/\.html/""" I get some
output, but not the correct output. I've also tried escaping the
single quotes with \' and putting it in regular double quotes but that
didn't work either.
i'd appreciate any help 7 4743
also, i've tried the Shell=True parameter for Popen, but that didn't
seem to make a difference
On Mar 25, 8:31 pm, skunkwerk <skunkw...@gmail.comwrote:
Hi,
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 think the problem is the quoted string the rename command wants -
when I put it in triple quotes like """s/\.htm$/\.html/""" I get some
output, but not the correct output. I've also tried escaping the
single quotes with \' and putting it in regular double quotes but that
didn't work either.
i'd appreciate any help
En Wed, 26 Mar 2008 00:39:05 -0300, skunkwerk <sk*******@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.)
--
Gabriel Genellina
On Mar 25, 9:25*pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
En Wed, 26 Mar 2008 00:39:05 -0300, skunkwerk <skunkw...@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.)
--
Gabriel Genellina
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?
cheers
En Wed, 26 Mar 2008 02:15:28 -0300, skunkwerk <sk*******@gmail.com>
escribió:
On Mar 25, 9:25*pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
>En Wed, 26 Mar 2008 00:39:05 -0300, skunkwerk <skunkw...@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
On Mar 25, 11:04*pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
En Wed, 26 Mar 2008 02:15:28 -0300, skunkwerk <skunkw...@gmail.com*
escribió:
On Mar 25, 9:25*pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
En Wed, 26 Mar 2008 00:39:05 -0300, skunkwerk <skunkw...@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?
On Mar 26, 6:44*am, skunkwerk <skunkw...@gmail.comwrote:
On Mar 25, 11:04*pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
En Wed, 26 Mar 2008 02:15:28 -0300, skunkwerk <skunkw...@gmail.com*
escribió:
On Mar 25, 9:25*pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
>En Wed, 26 Mar 2008 00:39:05 -0300, skunkwerk <skunkw...@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 specifythe *
>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?
in addition, when I use Popen without any quotes, or without quotes
for the regular expression, I get an exception.
I'm running ubuntu linux 7.10 with python 2.5.1
thanks
On Mar 26, 10:33*pm, skunkwerk <skunkw...@gmail.comwrote:
On Mar 26, 8:05*am, Jeffrey Froman <jeff...@fro.manwrote:
skunkwerkwrote:
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
Without shell=True, your glob characters will not be expanded. Hence, the
command looks for a file actually named "*.htm"
when I add shell=True to the subprocess command, I get the following
output:
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
Here the use of the shell may be confounding the arguments passed. Your
command will probably work better if you avoid using shell=True. However,
you will need to perform your own globbing:
# Untested (no perl-rename here):
command = ['rename','-vn', 's/(.*)\.htm$/model.html/']
files = glob.glob('*.htm')
command.extend(files)
p = subprocess.Popen(
* * command,
* * stdout=subprocess.PIPE,
* * stderr=subprocess.PIPE,
* * )
Jeffrey
thanks Jeffrey, that worked like a charm!
I'm trying to detect when the subprocess has terminated using the
wait() function - but when there is an error with the call to rename
(ie the file doesn't exist) rename (when run from the command line
just terminates and displays the error). In the code above, though,
my call to p.wait() just hangs when rename should throw an error...
I've tried adding shell=True but that stops the rename from working.
any ideas?
thanks This discussion thread is closed Replies have been disabled for this discussion. Similar topics
5 posts
views
Thread by Cameron Laird |
last post: by
|
12 posts
views
Thread by Eric_Dexter |
last post: by
|
9 posts
views
Thread by Phoe6 |
last post: by
|
3 posts
views
Thread by mclaugb |
last post: by
|
3 posts
views
Thread by BartlebyScrivener |
last post: by
|
1 post
views
Thread by Steven Bethard |
last post: by
|
8 posts
views
Thread by clyfish |
last post: by
|
25 posts
views
Thread by Jeremy Banks |
last post: by
|
1 post
views
Thread by Mark Shewfelt |
last post: by
| | | | | | | | | | |