Python Youtube-dl - держать окно терминала / tkinter открытым после выполнения
Я использую tkinter и youtube-dl под python
def dl(lk,fl): # link / file location
opts=['-o', fl+'/%(title)s-%(id)s.%(ext)s', '--playlist-end', '20', '--extract-audio', '--audio- format', 'mp3', '--audio-quality', '9', '--write-thumbnail', lk]
youtube_dl.main(opts)
return "Successful download"
Это основная функция, которая использует библиотеку, ничего необычного.
Я звоню из tkinter, поэтому, когда я запускаю его, загрузка начинается и заканчивается. После этого он закрывает мои окна tkinter.
Здесь функция, которая вызывает первую функцию в классе tkinter.
def dlv(self):
self.url = self.iurl.get()
if not self.url:
self.msg = "Error : no url"
elif not urlregex.match(self.url):
self.msg = "Error : invalid url"
else:
self.msg = dl(self.url,filel)
self.Com()
Я пытаюсь остановиться, вызывая некоторые функции в качестве ввода или необработанного ввода. Я также искал вариант из библиотеки YouTube YouTube.
Ничто не работает хорошо.
Спасибо
1 ответ
Я не знаком с youtube_dl
, но я думаю, что это вызывает sys.exit
в конце. Попробуйте subprocess.Popen
вместо.
Что-то вроде,
import subprocess
def dl(lk, fl):
opts = ['-o', fl + '/%(title)s-%(id)s.%(ext)s', '--playlist-end', '20',
'--extract-audio', '--audio- format', 'mp3', '--audio-quality',
'9', '--write-thumbnail', lk]
args = ['python', '-m', 'youtube_dl']
args.extend(opts)
p = subprocess.Popen(args) # You can use subprocess.PIPE to redirect stdout & stderr. Read the doc for more info.
p.communicate() # Wait for process to terminate.
if p.returncode == 0: # You might wanna check for correct successful return code.
return 'Successful download'
else:
return 'Download Failed'
Обратите внимание, что я не тестировал этот код. Кроме того, это приведет к зависанию основного окна tkinter. Вы можете вызвать это в отдельном потоке / процессе.