Using sys.stdout / is simply nonsense. The more I think about it, the more I realise how bad it is.
Going on about it endlessly seems pointless. If the even mini threading thing is turned on, now what ? some other module eats the message intended for a different module ? A state machine with its own matching code in sends and receives to reuse the unwanted singular value ? The precise rules for establishing a variable without the global keyword is not obvious, or catcat of anything by leaving a empty set dangling initially. *especially* if the program is fundamentally open ended, that is, there could be considerable new functions sharing ideas all over, planning ahead for as good 45 seconds is a lot better then endless hacking any old way. 1) Make a variable in a module known to be a shared item. Named for that specifically. def Mt() {} IoDot = {} # Once before program does anything... in global. ref import global as gi later. 2) Create highly generalised speculative named ideas init each variable once with a {} ioDot.weights = Mt{} ; ( I make it a local method so the method can stand alone for unit testing ) 3) Uniformly ref it with a import statement. in all 'other' modules 4) When a shared idea is apparent concat a new named portion to the name for this purpose. Then use those fairly without fussing as required. If one scares you, set it to {} after some scary moment if you are feeling fussy. 5) All 'ideas' will be at a 3rd or more subsid level in naming. ex: gi.IoDot.weights.trucks = whatever gi.IoDot.weights.cars = whatever gi.toastDot.warnings.tooHeavy gi.toastDot.warnings.isOk These can all be any kind of object. So easy I have a very sizable highly generalized program using this and have not found any defect in doing so. Regs Dan -- https://mail.python.org/mailman/listinfo/python-list