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])
Können Sie die komplette, ungeschnittene Fehlermeldung posten? – phihag
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
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