ubuntu を使用した Python 2.7.3:
いくつかの引数を指定してプログラム (この例では youtube-dl) を実行しようとするsubprocess.call
と、次の問題が発生します。次のスクリプトを検討してください:
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でどのように処理するかを確認しました。subprocess.call
そこに引数としてURLが表示されないので、引数を間違って渡していると思います。
補足:もう 1 つ奇妙に感じるのは、スクリプトでの順序とは対照的に、ここでの印刷がサブプロセス呼び出しの後に有効になるという事実です。ここで非同期に何かが起こっていますか? ここで何が欠けていますか?どうもありがとう