subprocess.call的问题

时间:2013-09-23 12:41:02

标签: python-2.7 subprocess youtube-dl

Python 2.7.3 with ubuntu:

尝试使用subprocess.call运行一个带有一些参数的程序(在本例中为youtube-dl),我遇到了以下问题。考虑以下脚本:
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)

此脚本打印输出:

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

扼杀,在输出的第一行,我看到脚本输出./youtube-dl https://www.youtube.com/watch?v=8SbUC-UaAxE -x --audio-format mp3
这个命令直接从bash运行,但是从python产生一个OSError。我也想过尝试提供url作为这样的论点:

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

但是youtube-dl的错误使用错误:

 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

我已阅读youtube-dl来源,了解handles the supplied argumentsoptparse的关联方式。我没有看到url作为参数,所以我猜我正在将参数传递给subprocess.call
旁注:我发现奇怪的另一件事是这里的print在子进程调用之后生效,而不是它们在我的脚本上的顺序。这是异步发生的事吗? 我在这里错过了什么?非常感谢

1 个答案:

答案 0 :(得分:1)

--audio-formatmp3应作为单独的参数传递:

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