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 arguments与optparse的关联方式。我没有看到url作为参数,所以我猜我正在将参数传递给subprocess.call
。
旁注:我发现奇怪的另一件事是这里的print在子进程调用之后生效,而不是它们在我的脚本上的顺序。这是异步发生的事吗?
我在这里错过了什么?非常感谢
答案 0 :(得分:1)
--audio-format
和mp3
应作为单独的参数传递:
myArray = ['./youtube-dl', url, '-x', '--audio-format', 'mp3']