Wie kann man wissen, ob das Python-Skript mit der Option -m des Interpreters ausgeführt wurde?

8

Ich konnte keine Antwort finden, nachdem ich alles Folgende gelesen hatte:

Begründung:
Wenn ein Testskript, das relative Importe verwendet, ohne die Option -m ausgeführt wird, könnte ich eine Warnmeldung ausgeben, anstatt den Benutzer mit der Standard-Traceback zu verlassen, die zu ValueError: Attempted relative import in non-package exception führt. Ohne dies zu wissen, kann ich diese Ausnahme erfassen und nur vorschlagen Mangel an -m -Option könnte der Grund für einen Fehler sein.

    
Piotr Dobrogost 01.12.2011, 21:45
quelle

2 Antworten

2

Eine weitere Beobachtung ist, dass __package__ bei der direkten Ausführung des Skripts auf None und bei Verwendung von -m auf den Paketnamen gesetzt wird (mit der leeren Zeichenfolge, wenn das Modul nicht in einem Paket enthalten ist) anders als None ).

    
jcollado 01.12.2011, 22:00
quelle
3

Haftungsausschluss: Dies ist nur eine Beobachtung, ich habe es nicht in den Dokumenten gesehen, daher ist es wahrscheinlich implementierungsabhängig und möglicherweise nicht konsistent über verschiedene Python-Versionen.

Ich habe festgestellt, dass beim Aufrufen eines Skripts mit der Option -m eine Variable namens __loader__ zum Namespace hinzugefügt wird. Sie können also oben im Skript prüfen, ob diese Variable vorhanden ist:

%Vor%

Für zusätzliche Sicherheit könnten Sie überprüfen, ob __loader__ eine Instanz von pkgutil.ImpLoader ist:

%Vor%     
Andrew Clark 01.12.2011 21:57
quelle

Tags und Links