Popen to get stdout and stderr for ffmpeg - No such file or directory ?
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 ?
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 ?
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 ?
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