morytox hat geschrieben:- was bedeutet code auf modulebene ?
Beispiel:
Code: Alles auswählen
print "Hallo Welt"
def func():
#mache etwas
def func2():
# mache was anderes
...
Das print steht hier auf Modulebene. Wenn Du nun dieses Script (wir nennen es mal foo.py) in ein anderes Python-Script einbinden willst, würdest Du folgendes schreiben:
Du willst also in der Funktion bar die Funktion func2 aus dem Script (Modul) "foo.py" nutzen. Nun passiert nach dem import aber folgendes: Es werden alle Befehle abgearbeitet in foo, die sich auf Modulebene (sprich außerhalb von Funktionen und Klassen) befinden. Du würdest also die Ausgabe des print Befehls sehen. Das ist aber in diesem Falle vermutlich nicht erwünscht.
Also nutzt man folgenden Trick:
Code: Alles auswählen
import irgendwas
def func1():
pass
def funcx():
pass
def main():
# hier ist der Einstiegspunkt in die Abarbeitung des Scriptes
print "Hallo Welt!"
func1()
...
if __name__ == "__main__":
main()
Startest Du dieses Script, so "merkt" der Interpreter, dass Du dieses Script ausfürehn möchtest und verzweigt in die main()-Funktion (Kann auch anders heißen oder direkt unterhalb des if __name__-Hooks stehen).
Importierst Du nun dieses Script in einem anderen, so weiß der Interpreter, dass er eben nicht in dieses main()-Funktion reinrutschen soll. Genau das erwartet man eben bei dieser Benutzung.
Ein weiterer Grund ist die Vermeidung von unnötigen globalen Variablen. Schreibst Du alles "planlos" auf Modulebene, so sind natürlich alle Namen in allen Funktionen verfügbar. Das ist idR gefährlich und unnötig. So kannst Du Dir überlegen, was Du ggf. in der main()-Funktion definierst und was nicht.
- subprocess fand ich nciht so gut , ich hatte es anfangs mit subprocess versucht hab aber nur fehler bekommen weil da so viele ergänzungeen und alles war , hab einfahc nicht durchgesehn und os.system sieht verdammt einfach aus bzw. war für mich sehr einfach anzuwenden
Was genau hat denn da nicht funktioniert? Man wird Dir hier immer aus guten Gründen zu subprocess raten. Es ersetzt eben das alte Sammelsurium an verschiedenen Funktionen (popen, popen2, usw) durch eine Abstraktion. Also: Auf subprocess umstellen lohnt sich.
-wieso nicht + ? soll ich in dem fall dann os.system(os.join("string", var, "string")) schreiben ?
Strings sind immutable in Python, d.h. man kann diese Zeichenketten nicht verändern. "foo" + "bar" erzeugt in Wirklichkeit also eine neue Zeichenkette. Das ist für Laufzeit und Ressourcen nicht förderlich. Man kann einzelne Zeichenketten z.B. durch "".join() zusammenfügen.
Man beachte die "[" und "]". join() verlangt als Parameter eine Sequenz.
Und ja, genauso sollte man os.join() verwenden. Damit hast Du einen garantiert fehlerfreien Pfad.