带有 ubuntu 的 Python 2.7.3:
尝试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 源代码,了解它如何使用optparse处理提供的参数。我在那里看不到 url 作为参数,所以我猜我错误地传递了参数。旁注:我觉得奇怪的另一件事是,这里的打印在子流程调用之后生效,而不是它们在我的脚本中的顺序。这里有什么异步发生的吗?我在这里想念什么?非常感谢subprocess.call