Wenn ich laufen:Python exec und __name__
exec "print __name__"
druckt __main__
.
Aber wenn ich laufen:
exec "print __name__" in {}
druckt __builtin__
.
Wie das zweite Beispiel zu drucken __main__
?
Was ich versuche zu erreichen, ist ein Stück Code mit exec
zu laufen, so dass es aus der Perspektive der es aussieht wie es von der Befehlszeile ausgeführt wurde.
Ich möchte den Code mit sauberen Bereich tun, aber das zweite Beispiel bricht den Code unter if __name__ == "__main__"
. Wie behebe ich das?
Ich kann leider keine temporäre Datei auf der Festplatte erstellen. Gibt es keine Möglichkeit, eine einfache Zeichenfolge auszuführen, als ob sie von der Befehlszeile aus ausgeführt würde? Und noch eine Frage zu Ihrer Antwort: Es sieht so aus, als würde es die Datei importieren (wie in 'import') - importiert oder führt sie die Datei aus? Ist da ein Unterschied? –
Um ein Modul zu importieren, muss * * ausgeführt werden. –
Beachten Sie, dass die Erwartung, dass '__name__ ==' __main __ 'funktioniert, impliziert, dass Sie hier Module ausführen. –