[Tutor] Let imported module access calling program
Kent Johnson
kent37 at tds.net
Tue Mar 25 12:22:19 CET 2008
Shrutarshi Basu wrote:
>> This seems kind of strange to me. You want the entire user module to be
>> re-run?
>
> Well perhaps not the entire module, but probably most of it.
How will you know how much to re-run? Reloading a module re-runs *all*
of it, including reinitializing any global variables...
> Here's an
> example. Suppose you want to define a simple obstacle avoidance
> behavior, the script should be something similar to:
>
> import robot
> if robot.sensor('front') > 100:
> robot.left_turn()
A few ideas:
- put all the code that should be repeated into a single function and
pass that function to a run() function:
def actions():
if robot.sensor('front') > 100:
robot.left_turn()
robot.run(actions)
- Give the user direct control of the timing:
while robot.is_running():
if robot.sensor('front') > 100:
robot.left_turn()
time.sleep(1) # or robot.wait()
- register event handlers for specific events. This is more complex but
it is also a more flexible execution model than polling at timed intervals:
def handle_sensor_front():
robot.left_turn()
robot.register('sensor', 'front', handle_sensor_front)
- have the user subclass robot and implement handler methods:
class MyRobot(robot):
def handle_sensor_front(self):
self.left_turn()
You might want to look at Pyro (Python Robotics) to see how others have
solved this problem:
http://pyrorobotics.org/?page=Pyro
Kent
>
> Defining the sensor() and left_turn() functions is no problem, but
> this should be a continuous behavior, hence the need to run it over
> and over at certain time intervals. I already have a config.py
> (accessed by robot.py and a few other modules) which the user can
> modify to set the intervals (and other details). i've also been
> thinking about creating a controller.py which handles the repetition
> and imports the user's code and runs its functions, but i would still
> like to explore this method.
> Thanks again,
> Basu
>
More information about the Tutor
mailing list