2017-10-26 4 views
0

Dies ist der Codeyoutube-dl exe funktioniert nicht

from tkinter import * 
from tkinter import ttk 
from tkinter import messagebox 
from tkinter import filedialog 
import youtube_dl 
import os 



class f(object): 
    def __init__(self, finestra): 
     self.finestra = finestra 
     self.top = ttk.Frame(self.finestra, padding="10 10 10 10") 
     self.top.grid(column=5, row=5) 
     self.top.columnconfigure(1, weight=1) 
     self.top.rowconfigure(1, weight=1) 

     self.finestra.bind("<Return>",self.esegui_query) 

     self.link = StringVar() 
     self.esito = StringVar() 
     self.bitrate = StringVar() 
     self.esito.set("In Attesa") 

     ttk.Label(self.top, text="Link:").grid(column=0,row=0) 
     ttk.Entry(self.top, textvariable=self.link).grid(column=1,row=0) 
     ttk.Button(self.top, text="Scarica", command=self.esegui_query).grid(column=2,row=0) 

     ttk.Label(self.top, text="Bitrate:").grid(column=0,row=1) 
     r1 = Radiobutton(self.top, text="192", variable=self.bitrate, value="192", cursor="dot") 
     r1.grid(column=1,row=1) 
     r2 = Radiobutton(self.top, text="320", variable=self.bitrate, value="320", cursor="dot") 
     r2.grid(column=2,row=1) 
     r1.select() 
     ttk.Label(self.top, textvariable=self.esito).grid(column=3,row=1) 

    def esegui_query(self,*argv): 
     link = self.link.get() 
     bitrate=self.bitrate.get() 
     ydl_opts = { 
     #'format': 'bestaudio/best', 
     'postprocessors': [{ 
      'key': 'FFmpegExtractAudio', 
      'preferredcodec': 'mp3', 
      'preferredquality': bitrate, 
         }], 
        } 
     self.esito.set("Downloading...") 
     try: 
      with youtube_dl.YoutubeDL(ydl_opts) as ydl: 
       ydl.download([link]) 
      self.esito.set("Encoding...") 
      for file in (os.listdir('.')): 
       if file.endswith('.mp3') or file.endswith('.m4a') or file.endswith('.mp4'): 
        file2 = file[::-1][16:][::-1] 
        break 
      self.esito.set("Download Completato") 
     except Exception as e: 
      self.esito.set("ERRORE") 
      messagebox.showwarning("ERRORE",e) 



finestra = Tk() 
finestra.title("Download Youtube") 
f = f(finestra) 
finestra.mainloop() 

Dieser Code in meinem IDLE Python 3.6 x86 funktioniert, aber nicht, wenn ich wandeln es in EXE mit cx_Freeze

dies „‚NoneType‘Objekt hat kein Attribut‚write‘“ und dies geschieht, wenn der Code diese Zeile ausführen: der Code von setup.py mir diesen Fehler

from cx_Freeze import setup, Executable 
import os,sys 
os.environ['TCL_LIBRARY'] = r'C:\Program Files (x86)\Python36-32\tcl\tcl8.6' 
os.environ['TK_LIBRARY'] = r'C:\Program Files (x86)\Python36-32\tcl\tk8.6' 

#includes = ["youtube_dl","tkinter","os"] 
include_files = [r'C:\Program Files (x86)\Python36-32\DLLs\tcl86t.dll',\ 
      r'C:\Program Files (x86)\Python36-32\DLLs\tk86t.dll'] 

base = 'Win32GUI' if sys.platform == 'win32' else None 


executables = [Executable("youtube.py", base=base)] 

packages = ["youtube_dl","tkinter","os"] 
options = { 
    'build_exe': { 

     #'packages':packages, 
     #'includes':includes, 
     'include_files':include_files, 
    }, 

} 

setup(
    name = "youtube", 
    options = options, 
    version = "1.0", 
    description = 'download from youtube', 
    executables = executables 
) 

die ausführbare Datei Rückkehr zu konvertieren

Ich denke, weil youtube_dl zuerst eine mp4-Version des Liedes herunterladen und nach der Umwandlung. Es zuerst herunterladen und in den Ordner das Lied in MP4-Version schreiben und ich denke, es gibt das Problem, konvertieren Sie es in mp3 und entfernen Sie die mp4-Version.

ich glaube, der Fehler in dieser Linie ist, weil Einsätze haben einige messagebox wie folgt aus:

try: 
    with youtube_dl.YoutubeDL(ydl_opts) as ydl: 
     messagebox.showwarning("ERRORE",'1') <--- this is showed 
     ydl.download([link]) 
     messagebox.showwarning("ERRORE",'2') <--- this is not showed 
    self.esito.set("Encoding...") 
    for file in (os.listdir('.')): 
     if file.endswith('.mp3') or file.endswith('.m4a') or file.endswith('.mp4'): 
      file2 = file[::-1][16:][::-1] 
      break 
    self.esito.set("Download Completato") 
except Exception as e: 
    self.esito.set("ERRORE") 
    messagebox.showwarning("ERRORE",e) 

und wenn ich die exe ausführen, wird das Skript startet, aber nachdem ich ein Lied herunterladen klicken, um das Skript mir zeigen nur

messagebox.showwarning("ERRORE",'1') 

und den Fehler

'NoneType' object has no attribute 'write' 

so scheint er sich zu stoppen in dieser Zeile gelöst

ydl.download([link]) 
+0

Können Sie die komplette, ungeschnittene Fehlermeldung posten? – phihag

+0

Ich bekomme Fehler nur in der .exe-Version, und der Fehler, dass der Versuch: außer: fangen und melden Sie mir ist nur 'NoneType' Objekt hat kein Attribut 'schreiben' – tascio

+0

Ich denke, der Fehler ist in dieser Zeile, weil ich Inserts habe einige messagebox, um die Ausführung zu überprüfen, wie folgt: messagebox.showwarning ("ERRORE", "1") ydl.download ([link]) messagebox.showwarning ("ERRORE", "2") und das Skript zeigen mir nur ERRORE 1 vorher, um den Fehler zu zeigen – tascio

Antwort

0

ich herunterladen youtube-dl.exe für Fenster und deren Verwendung Download von Songs tun

cmd = [d+r'\bin\youtube-dl.exe', '-x', '--audio-format=mp3', 
     r'-o'+d+'\download\%(title)s.%(ext)s', 
     '--audio-quality=%s' % (bitrate), 
     '%s' % (link) 
     ] 

subprocess.call(cmd, shell=mshell) 
Verwandte Themen