Python从外部动态更改循环内部的变量

Python从外部动态更改循环内部的变量,python,robot,Python,Robot,我正在制作一个python程序来控制机器人手臂,它基本上读取先前生成的机器文件,并通过TCP/IP在for循环读取行和基本开关结构中向机器人发送指令 我在python的开头声明了一些参数,如: speed_normal = 5 # mm/s acc_normal = 1 # mm/s2 wait_time = 1000 # ms 然后我打开并读取指令文件: for index,filename in enumerate(glob.glob(os.path.join(directory, '*.

我正在制作一个python程序来控制机器人手臂,它基本上读取先前生成的机器文件,并通过TCP/IP在for循环读取行和基本开关结构中向机器人发送指令

我在python的开头声明了一些参数,如:

speed_normal = 5 # mm/s
acc_normal = 1 # mm/s2
wait_time = 1000 # ms
然后我打开并读取指令文件:

for index,filename in enumerate(glob.glob(os.path.join(directory, '*.moi')))

    with open(filename) as f:
        cmd_list = f.read().splitlines()

        for cmd_line in cmd_list:
            bits = cmd_line.split(';')
其中一个开关会改变机器人的速度:

        elif bits[0] == 'sp':
            print('Speed Instruction',bits[1])

            if bits[1] == 0:

                robot.setSpeed(speed_linear=speed_normal)
所以我的问题是,在程序执行过程中,我如何更改变量
speed\u normal
,比如从一个用作“控制面板”的外部文件?因此,如果不停止程序,我想将其更改为20 mm/s


谢谢

您需要选择将配置存储在磁盘上的格式,然后定期重新读取配置文件。我将编写某种容器对象来透明地处理所有这些:

import os

from datetime import datetime, timedelta

SENTINEL = object()

class DynamicConfiguration(object):
    def __init__(self, filename):
        self.filename = filename
        self.attributes = {}

        self.last_modification = 0
        self.last_reload_attempt = datetime(1900, 1, 1)

    def reload_file(self):
        mtime = os.path.getmtime(self.filename)

        if mtime <= self.last_modification:
            return

        self.last_modification = mtime

        with open(self.filename, 'r'):
            self.attributes = ...  # somehow populate them

    def get(self, key, default=SENTINEL):
        if datetime.now() - self.last_reload_attempt >= timedelta(seconds=5):
            self.reload_file()
            self.last_reload_attempt = datetime.now()

        if default is SENTINEL:
            return self.attributes[key]
        else:
            return self.attributes.get(key, default)

非常感谢你。这适用于读取外部文件的部分,但我认为在打开文件并读取行的部分中存在错误。这意味着,即使我更改了参数文件,也会立即执行这一操作。这意味着,即使我更改了参数文件,也会有已经计算好的指令,只是在排队。有办法一次读一行吗?我需要某种类型的回调函数吗?@MiTo:你说的“有指令已经计算好了,刚刚排队”是什么意思?
config = DynamicConfiguration('configuration.something')

...

robot.setSpeed(speed_linear=config.get('speed_normal', 5))