Ian Kelly wrote: >> def main(func): >> if func.__module__ == "__main__": >> func() >> return func # The return could be omitted to block the function from >> being manually called after import. >> >> Just decorate the "main" function of the script with that, and it will be >> automatically called when ran as a script, but not when imported as a >> module. > > This calls it at the wrong time, though. Typically the way this idiom > is used is that you define everything you need (functions, classes, > etc.) within the main script, and then you call the main function. > This would call the main function at the time it's defined, when other > things in the main script may not have been defined yet. One could > place the main function last, but it would be preferable not to be > forced.
for the "right time" you can choose to spin a thread and wait to the end of the load of the module something like from threading import Thread, current_thread def run_func(func, module_thread): module_thread.join() func() def main(func): if func.__module__ == '__main__': Thread(target=run_func, args=[func, current_thread()]).start() return func -- By ZeD -- https://mail.python.org/mailman/listinfo/python-list