"Jesse" <[EMAIL PROTECTED]> writes:

> Hi all, I have a problem using wget and Popen. I hope someone can help.
>
>
> -- Problem --
> I want to use the command:
> wget -nv -O "dir/cpan.txt" "http://search.cpan.org";
> and capture all it's stdout+stderr.
> (Note that option -O requires 'dir' to be existing before wget is executed)
>
> Popen doesn't work, while os.system and shell do. Popen will give the error:
> dir/cpan.txt: No such file or directory
>
> While os.system and shell will give the correct result:
> 06:52:40 URL:http://search.cpan.org/ [3657/3657] -> "dir1/cpan.txt" [1]

[...]

> -- Python Code using Popen with cmd arg list --
> # imports
> import os
> from subprocess import Popen, PIPE
>
> # vars and create dir
> cmd_set = ['wget', '-nv', '-O dir/cpan.txt', 'http://search.span.org']
> cmd = ' '.join(cmd_set)
> print "cmd: " + cmd
> try:
> os.makedirs('dir')
> except:
> print 'dir already exists'
>
>
> # execute using Popen (does NOT work)
> proc = Popen(cmd_set, stdout=PIPE, stderr=PIPE)
> return_code = proc.wait()
> if return_code == 0:
> print "Success:\n%s" % (proc.stdout.read() + proc.stderr.read())
> else:
> print "Failure %s:\n%s" % (return_code, proc.stderr.read() +
> proc.stdout.read())
>
>
> # execute using os.system (does work)
> os.system(cmd)
>
>
> -- Python code output of Popen --
> Failure 1:
> dir/cpan.txt: No such file or directory
>
>
> -- Question --
> Why is Popen unable to correctly execute the wget, while os.system can?

I don't know exactly why in this case Popen doesn't work,
but the counterpart of os.system is Popen with option shell=True
and the first parameter should be a string instead of list.
That seems to work:
proc = Popen("wget -nv -O dir/cpan.txt http://search.span.org";, 
              shell=True, stdout=PIPE, stderr=PIPE)

and this variant seems to work too:
cmd_set = ['wget', '-nv', '-O', 'dir/cpan.txt', 'http://search.span.org']

-- 
HTH,
Rob
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to