python - 在程序运行时更改值
问题描述
我需要一个树莓派上的程序,我可以 delay
在程序运行时更改变量的值,并且不会被任何input()
. 我只想出了一个解决方案:从文本文件中读取一个值并使用另一个程序更改它。但是我的解决方案效果不佳...当我覆盖文本文件中的值时,有时会发生程序无法将其转换为浮点数...有时效果很好,有时会打印此错误:
ValueError: could not convert string to float: ''
但是文本文件中的值似乎很好......
所以,这是主程序:
def pause():
file = open('delay.txt', 'r')
pause = file.readline()
return pause
delay = float(pause())
while True:
GPIO.output(STEP, GPIO.HIGH)
delay = float(pause())
sleep(delay)
GPIO.output(STEP, GPIO.LOW)
delay = float(pause())
sleep(delay)
这是程序,它正在改变文本文件中的值:
while True:
rpm = float(input('RPM: '))
delay = (1/(rpm*60))/800
file = open('delay.txt', 'w')
file.write(str(delay))
file.close()
我真的无法接受这个......我将不胜感激任何建议和帮助解决它。您不必用文本文件坚持我的想法,也许有更好的解决方案,但我想不出更好的办法。
解决方案
我建议您为此使用线程。我为您制作了一个小代码示例来帮助您入门:
import threading
from time import sleep
import logging
logging.basicConfig(level=logging.DEBUG, filename="thread_output.txt", format='%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s')
running = True
delay = 1
def worker(delay, running):
while running():
logging.debug(1)
sleep(delay())
logging.debug(0)
sleep(delay())
x = threading.Thread(target=worker, args=(lambda: delay, lambda: running))
x.start()
while running:
code = input("""
Make a choice:
1) Set delay
2) quit
""")
code = int(code)
if code == 1:
try:
val = input("Give up the desired delay between 0 and 10 seconds:")
val = int(val)
assert val >= 0 and val <= 10
delay = val
except ValueError:
print("Invalid input! Returning to home menu")
continue
elif code == 2:
running = False
else:
print("invalid option! Returning to home menu")
continue
print("quiting...")
x.join()
在这里对您有帮助的部分是您将延迟的值(在示例中还包括运行)作为 lambda 函数传递。这意味着每次使用该值时,都会重新获取该值。如果您随后要更改变量的值,它将被传递:)
如果您有更多问题,请联系我!
推荐阅读
- javascript - × 错误:无效的挂钩调用。Hooks 只能在函数组件的主体内部调用。[ReactJS]
- html - SASS 中的直系子女和任何兄弟姐妹
- jenkins - 如何使用声明性 groovy(脚本控制台)从 jenkins 管道脚本中获取标签
- python - 缩放训练和测试数据后,模型分数变为 1,似乎有些不对劲?
- npm - 使用汇总和汇总捆绑策略的包依赖项
- python - 遍历输入整数列表的 for 循环卡在第一个条件上
- java - RedisConnection exists 方法总是返回null(Spring启动数据redis)
- php - 如何根据条件 laravel 获取左表中的所有数据和相关表数据
- flutter - Flutter 中的 AWS Amplify DataStore 动态查询构建器
- antlr - 负数的 ANTLR 语法问题