Bitte um Erklärung if __name__ == 'main':

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Hallo
ich habe hier folgendes Skript "codec_extractor.py"

Code: Alles auswählen

#!/usr/bin/env python

import subprocess as sub
import sys

class FFprobe(object):
    def __init__(self, path):
        self.path = path

    def get_codecs(self):
        cmd = ["ffprobe", "-show_streams", self.path]
        handle = sub.Popen(cmd, stdout=sub.PIPE, stderr=sub.PIPE)
        output = handle.communicate()[0]
        codecs = []
        for line in output.split("\n"):
            if line.startswith("codec_name="):
                codec = line.strip().split("=")
                codecs.append(codec[1])
        print codecs


ffprobe = FFprobe(sys.argv[1])
ffprobe.get_codecs()
Wenn ich das jetzt im Terminal aufrufe erhalte ich wie erwartet diesen Output

Code: Alles auswählen

./codec_extractor.py ed_hd.avi 
['msmpeg4v2', 'ac3']
Wenn ich das Skript ändere und ans Ende "if __name__ == main" schreibe

Code: Alles auswählen

#!/usr/bin/env python

import subprocess as sub
import sys

class FFprobe(object):
    def __init__(self, path):
        self.path = path

    def get_codecs(self):
        cmd = ["ffprobe", "-show_streams", self.path]
        handle = sub.Popen(cmd, stdout=sub.PIPE, stderr=sub.PIPE)
        output = handle.communicate()[0]
        codecs = []
        for line in output.split("\n"):
            if line.startswith("codec_name="):
                codec = line.strip().split("=")
                codecs.append(codec[1])
        print codecs


if __name__ == 'main':
    ffprobe = FFprobe(sys.argv[1])
    ffprobe.get_codecs()
und es aufrufe erhalte ich keinen Output, aber auch keine Fehlermeldung.Vielleicht kann mir das jemand erklären, damit auch ich alter Trottel das kapiere.

Gruß....busfahrer
Alles wird gut ;-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Es muss auch '__main__' heissen.

Kleiner Trick, der beim Debuggen hilfreich gewesen waere: Aufruf mit `python -i` statt `python` und du haettest direkt selbst untersuchen koennen, was der Inhalt von `__name__` ist.
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Hallo
Asche auf mein Haupt. Da grübel ich jetzt seit fast 2 Tagen und schaue mir etliche Skripte an, selbst welche die ich hier selber geschrieben habe und wo ich "if __name__ == __main__" genutzt habe :oops: Es ist mir manchmal ein Rätsel wie man so blind sein kann. Vielen Dank für das wiederherstellen meiner Sehkraft :)

Gruß....busfahrer
Alles wird gut ;-)
Antworten