2016-03-22 16 views
-1

YouTubeのビデオから直接mp3を抽出するために、youtube-dlパッケージを実行するスクリプトを作成しようとしています。Pythonスクリプトでコマンドを実行するsubprocess.callを取得する

私はこのようなos.system()でそれを行うことができる午前:

#! /usr/bin/env python3 
import os 
#getting the youtube video link 
vlink = input('Enter the youtube video link: ') 
cmd = "youtube-dl --extract-audio --audio-format mp3 --audio-quality 0 " + vlink 
os.system(cmd) 

私はsubprocess.call()/subprocess.Popen()を使用してこれを達成するために試してみたいです。 私は関数の引数を入力する多くの変形を試みましたが、それらはすべてエラーを返します、誰かが私を導くことができれば幸いです!

+1

サブプロセスでargsのリストを渡しましたか?また、どのようなエラーがありましたか? –

答えて

0

通常、あなただけの引数を分割するshlex.splitを使用することができます。

import shlex 
import subprocess 
subprocess.call(shlex.split("youtube-dl --extract-audio --audio-format mp3 --audio-quality 0 " + vlink)) 

しかしを、あなたもおそらくそれを必要としない:

import shlex 
import subprocess 
subprocess.call([ 
    "youtube-dl", 
    "--extract-audio", 
    "--audio-format", 
    "mp3", 
    "--audio-quality", 
    "0", 
    vlink]) 

注デフォルトでは、subprocessことシェルをバイパスするので、シェル構成ファイルで環境をパス変更する場合は、特定のenvを指定する必要があります。

+0

ありがとう、私の問題は私が "--audio-format mp3"、 "--audio-quality 0"をしたのと同じ理由で1つの引数をまとめなければならないと思ったからです。 'mp3'と '0'を分けて問題を解決しました! – bee3

+0

@ bee3 - _most_コマンドラインパーサーは ''--audio-format = mp3''と書くこともできます。そのように書くことは、それらが属するコマンドライン引数に関連付けられた値を保持するので、コードの明快さに役立ちます。 – mgilson

関連する問題