Вопрос

Python 2.7.3 with ubuntu:

Trying to run a program, (youtube-dl in this example) with subprocess.call with some arguments, I encounter the following issue. consider the following script:
try.py:

#!/usr/bin/python

from subprocess import call

url = "https://www.youtube.com/watch?v=8SbUC-UaAxE"
myArray = ['./youtube-dl {}'.format(url),'-x','--audio-format mp3']
#print the array before executing:
for item in myArray:
    print item,
#execute:
call(myArray)

This script prints outputs:

oris@oris:~/Desktop/YouTube/backend$ ./try.py 
./youtube-dl https://www.youtube.com/watch?v=8SbUC-UaAxE -x --audio-format mp3
Traceback (most recent call last):
File "./try.py", line 16, in <module>
call(myArray)
 File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

Strangly, On the first line of the output I see the script does output ./youtube-dl https://www.youtube.com/watch?v=8SbUC-UaAxE -x --audio-format mp3
This command runs perfectly from bash directly, but produces an OSError from python. I also thought maybe to try and supply the url as an argument like this:

myArray = ['./youtube-dl', url,'-x','--audio-format mp3']

but than youtube-dl has an error of incorrect usage:

 oris@oris:~/Desktop/YouTube/backend$ ./try.py 
 Usage: youtube-dl [options] url [url...]

 youtube-dl: error: no such option: --audio-format mp3
 ./youtube-dl https://www.youtube.com/watch?v=8SbUC-UaAxE -x --audio-format mp3

I've read youtube-dl source to see how it handles the supplied arguments with optparse. I don't see the url as an argument there, so I'm guessing i'm passing the arguments to subprocess.call incorrectly.
Side note: another thing I find odd is the fact the print here takes effect after the subprocess call, as opposed to their order on my script. Is something happening here asynchronously? What am I missing here? Many thanks

Это было полезно?

Решение

--audio-format and mp3 should be passed as separated arguments:

myArray = ['./youtube-dl', url, '-x', '--audio-format', 'mp3']
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top