2016-03-22 19 views
-1

Youtube videolarından doğrudan MP3 ayıklamak için youtube-dl paketini çalıştıracak bir betik yapmaya çalışıyorum.Python betiğimde komutu yürütmek için subprocess.call aldım.

Böyle os.system() ile bunu yapmak mümkün duyuyorum:

#! /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) 

Ben subprocess.call()/subprocess.Popen() kullanarak Bunu gerçekleştirmek için denemek istiyorum. İşlevdeki argümanları girmenin birçok çeşidini denedim, ancak hepsi hata verdi, umarım birileri bana rehberlik edebilir, teşekkürler!

+1

Alt işlemle birlikte bir args listesi ilettiniz mi? Ayrıca hangi hatayı aldın? –

cevap

0

Genellikle, sadece argümanlar bölmek için shlex.split kullanabilirsiniz:

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

ama, ayrıca genelde ihtiyaç yoktur:

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

Not varsayılan olarak, subprocess Kabuğunuzu baypas edecek, böylece kabuk yapılandırma dosyalarında ortamınızda yol değişiklikleri yapıyorsanız, belirli bir env belirtmeniz gerekebilir.

+0

teşekkürler, benim sorunumun birlikte 1 argümanı kapsayacağını düşündüğüm "--audio formatlı mp3", "--audio-quality 0" yaptım. 'mp3' ve '0' ayırmak problemi çözdü! – bee3

+0

@ bee3 - _most_ komut satırı ayrıştırıcıları, '' --audio-format = mp3 '' şeklinde yazmanızı da sağlar. Bu şekilde yazmak, ait oldukları komut satırı bağımsız değişkeniyle ilişkili değerleri tutarken kod netliği için yararlı olabilir. – mgilson

İlgili konular