Python从外部动态更改循环内部的变量
我正在制作一个python程序来控制机器人手臂,它基本上读取先前生成的机器文件,并通过TCP/IP在for循环读取行和基本开关结构中向机器人发送指令 我在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, '*.
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))