Reputation: 13734
Checking to see if __name__ == '__main__'
is a common idiom to run some code when the file is being called directly, rather than through a module.
In the process of writing a custom command for Django's manage.py, I found myself needing to use code.InteractiveConsole
, which gives the effect to the user of a standard python shell. In some test code I was doing, I found that in the script I'm trying to execute, I get that __name__
is __console__
, which caused my code (dependent on __main__
) to not run.
I'm fairly certain that I have some things in my original implementation to change, but it got me wondering as to what different things __name__
could be. I couldn't find any documentation on the possible values, nor what they mean, so that's how I ended up here.
Upvotes: 9
Views: 3098
Reputation: 6492
from the document of class code.InteractiveInterpreter([locals]):
The optional locals argument specifies the dictionary in which code will be executed; it defaults to a newly created dictionary with key '__name__'
set to '__console__'
and key '__doc__'
set to None
.
maybe u can turnning the locals argument, set __name__
with __main__
, or change the test clause from
if __name__ == '__main__'
to
if __name__ in set(["__main__", "__console__"])
Hope it helps.
Upvotes: 9
Reputation: 3103
__name__
is usually the module name, but it's changed to '__main__'
when the module in question is executed directly instead of being imported by another one.
I understand that other values can only be set directly by the code you're running.
Upvotes: 6