Popen to get stdout and stderr for ffmpeg - No such file or directory ?

2011-04-18 Thread goldtech
Hi,

Trying to learn how to run a linux command and get the stdout and
stderr. I'm trying the following:

 cmd3 = r'ffmpeg -i /home/giga/Desktop/Guitar1.flv'
 p = Popen(cmd3, stdout=PIPE, stderr=PIPE)

Traceback (most recent call last):
  File pyshell#73, line 1, in module
p = Popen(cmd3, stdout=PIPE, stderr=PIPE)
  File /usr/lib/python2.6/subprocess.py, line 623, in __init__
errread, errwrite)
  File /usr/lib/python2.6/subprocess.py, line 1141, in
_execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

But:

 if os.path.exists(r'/home/giga/Desktop/Guitar1.flv'):
print exist

exist


And just running ffmpeg alone seems as expected:

 cmd2=r'ffmpeg'
 p = Popen(cmd2, stdout=PIPE, stderr=PIPE)
 stdout, stderr = p.communicate()
 stdout
'Hyper fast Audio and Video encoder\nusage: ffmpeg [options] [[infile
options] -i infile]... {[outfile options] outfile}...\n\n'
 stderr
FFmpeg version git-N-29152-g0ba8485, Copyright (c) 2000-2011 the
FFmpeg developers\n  built on Apr 16 2011 16:40:56 with gcc 4.4.5\n
configuration: --enable-gpl ...snip...

Also if I run the exact command (cmd3) in the terminal it works OK.
Why is it not finding the file? Thanks, help appreciated.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Popen to get stdout and stderr for ffmpeg - No such file or directory ?

2011-04-18 Thread Chris Rebert
On Mon, Apr 18, 2011 at 4:07 PM, goldtech goldt...@worldpost.com wrote:
 Hi,

 Trying to learn how to run a linux command and get the stdout and
 stderr. I'm trying the following:

 cmd3 = r'ffmpeg -i /home/giga/Desktop/Guitar1.flv'
 p = Popen(cmd3, stdout=PIPE, stderr=PIPE)

 Traceback (most recent call last):
  File pyshell#73, line 1, in module
    p = Popen(cmd3, stdout=PIPE, stderr=PIPE)
  File /usr/lib/python2.6/subprocess.py, line 623, in __init__
    errread, errwrite)
  File /usr/lib/python2.6/subprocess.py, line 1141, in
 _execute_child
    raise child_exception
 OSError: [Errno 2] No such file or directory

 But:

 if os.path.exists(r'/home/giga/Desktop/Guitar1.flv'):
        print exist
snip
 Also if I run the exact command (cmd3) in the terminal it works OK.
 Why is it not finding the file? Thanks, help appreciated.

Read The Fine Manual:
http://docs.python.org/library/subprocess.html#subprocess.Popen :
On Unix, with shell=False (default): [...] If a string is specified
for args, it will be used as the name or path of the program to
execute; ***this will only work if the program is being given no
arguments.*** (emphasis added)

The system is interpreting the entire command string as the path to an
executable; obviously there's no directory named ffmpeg -i , so the
path is invalid, hence the error.

Try instead:
cmd3 = ['ffmpeg', '-i', '/home/giga/Desktop/Guitar1.flv']

Cheers,
Chris
--
http://blog.rebertia.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Popen to get stdout and stderr for ffmpeg - No such file or directory ?

2011-04-18 Thread Rhodri James
On Tue, 19 Apr 2011 00:07:46 +0100, goldtech goldt...@worldpost.com  
wrote:



Trying to learn how to run a linux command and get the stdout and
stderr. I'm trying the following:


cmd3 = r'ffmpeg -i /home/giga/Desktop/Guitar1.flv'
p = Popen(cmd3, stdout=PIPE, stderr=PIPE)


Traceback (most recent call last):
  File pyshell#73, line 1, in module
p = Popen(cmd3, stdout=PIPE, stderr=PIPE)
  File /usr/lib/python2.6/subprocess.py, line 623, in __init__
errread, errwrite)
  File /usr/lib/python2.6/subprocess.py, line 1141, in
_execute_child
raise child_exception
OSError: [Errno 2] No such file or directory



This is something that catches everyone!  From the Fine Manual  
(http://docs.python.org/library/subprocess.html#using-the-subprocess-module):



On Unix, with shell=False (default): In this case, the Popen class
uses os.execvp() to execute the child program. args should normally
be a sequence. If a string is specified for args, it will be used
as the name or path of the program to execute; this will only work
if the program is being given no arguments.


What you actually want is more like:

p = Popen(('ffmpeg', '-i', '/home/giga/Desktop/Guitar1.flv'),
  stdout=PIPE, stderr=PIPE)

The manual gives you an example of using shlex to split a string
into tokens if you'd rather do it that way.

--
Rhodri James *-* Wildebeest Herder to the Masses
--
http://mail.python.org/mailman/listinfo/python-list


Re: Popen to get stdout and stderr for ffmpeg - No such file or directory ?

2011-04-18 Thread goldtech

 Read The Fine 
 Manual:http://docs.python.org/library/subprocess.html#subprocess.Popen:

snip...

 Try instead:
 cmd3 = ['ffmpeg', '-i', '/home/giga/Desktop/Guitar1.flv']

 Cheers,
 Chris
 --http://blog.rebertia.com

No doubt, I should RTFM...you're right!

Yes, works like a charm now.

Thanks so much for the help. I really appreciate it!
-- 
http://mail.python.org/mailman/listinfo/python-list