Python 在程序运行时更改值

Python 在程序运行时更改值,python,Python,我需要一个raspberry pi上的程序,在该程序中,我可以在程序运行时更改变量delay的值,并且不会被任何输入()中断。我只想到了一个解决方案:从文本文件中读取一个值,然后使用另一个程序进行更改。但我的解决方案不太管用。。。当我覆盖文本文件中的值时,有时程序无法将其转换为浮点。。。有时工作正常,有时打印此错误: ValueError:无法将字符串转换为浮点:“” 但是文本文件中的值似乎很好 这是主要的节目: def pause(): 文件=打开('delay.txt','r') paus

我需要一个raspberry pi上的程序,在该程序中,我可以在程序运行时更改变量
delay
的值,并且不会被任何
输入()中断。我只想到了一个解决方案:从文本文件中读取一个值,然后使用另一个程序进行更改。但我的解决方案不太管用。。。当我覆盖文本文件中的值时,有时程序无法将其转换为浮点。。。有时工作正常,有时打印此错误:

ValueError:无法将字符串转换为浮点:“”
但是文本文件中的值似乎很好

这是主要的节目:

def pause():
文件=打开('delay.txt','r')
pause=file.readline()
返回暂停
延迟=浮动(暂停())
尽管如此:
GPIO.输出(步进,GPIO.高)
延迟=浮动(暂停())
睡眠(延迟)
GPIO.output(步进,GPIO.LOW)
延迟=浮动(暂停())
睡眠(延迟)
这就是程序,它正在改变文本文件中的值:

while True:
    rpm = float(input('RPM: '))

    delay = (1/(rpm*60))/800
    file = open('delay.txt', 'w')
    file.write(str(delay))
      
    file.close()
我真的受不了这个。。。如果你能给我一些建议和帮助,我将不胜感激。
你不必坚持我的想法,用文本文件,也许有更好的解决方案,但我想不出更好的办法。

我建议您为此使用线程。我为您制作了一个小代码示例,以帮助您开始:

导入线程
从时间上导入睡眠
导入日志记录
logging.basicConfig(level=logging.DEBUG,filename=“thread_output.txt”,格式='(astime)s%(levelname)-8s[%(filename)s:%(lineno)d]%(message)s')
运行=真
延迟=1
def辅助装置(延迟、运行):
运行()时:
logging.debug(1)
睡眠(延迟()
logging.debug(0)
睡眠(延迟()
线程(目标=工作者,参数=(lambda:delay,lambda:running))
x、 开始()
运行时:
代码=输入(“”)
作出选择:
1) 设置延迟
2) 退出
""")
代码=int(代码)
如果代码==1:
尝试:
val=输入(“在0到10秒之间放弃所需的延迟:”)
val=int(val)

assert val>=0和val最好的解决方案可能是添加一些错误处理,以便在最后一个值无效时使用前一个值。当您在使用
w
打开文件时读取完文件时,也应关闭文件。文件被截断且长度为零。如果读取在文件扩展之前进入,这可能是读取返回空字符串的点。您在这里面临一个竞争条件:文件被一个进程读取,而被另一个进程修改。使用文件锁定可能有助于避免这种情况。有像
flock
fcntl
这样的模块来实现这一点。IPC有更好的机制。一个明显的解决办法是更改您的程序,使其接受信号,并且只在您发送该信号时重新读取文件。非常感谢!:)我不知道线程,所以昨天我不得不学习它:D但它可以按照我的要求工作:D thx again不客气:)