Python while循环不更新

时间:2016-07-12 02:21:56

标签: python bash

我对Python很陌生。

我试图显示传感器的当前温度,我从bash脚本中获取。我使用sed替换python脚本(temp.py)中的字符串,该字符串将该字符串输出到LCD显示器。

不幸的是,当我运行temp.py时,它只显示我运行它时的温度,但它不会更新,即使lcd.py脚本不断变化(它只显示一个温度)。

while True:
    lcd_string("Temp: 25.123 *C",LCD_LINE_1,1)
    time.sleep(1)

25.123在temp.py中不断变化,但LCD中没有显示不同的温度

有没有办法让它更新?

4 个答案:

答案 0 :(得分:5)

更改磁盘上的.py文件不会更改正在运行的程序。程序启动时,.py文件只读取一次。之后,.py文件不会再次使用,直到程序再次运行。

答案 1 :(得分:2)

让你的sed脚本不断更新一个名为"label.txt"的文件(你可能根本不需要sed ...另外,为什么你不只是从python接口传感器?)

然后在你的temp.py脚本中

while True:
    lcd_string(open("label.txt").read(),LCD_LINE_1,1)
    time.sleep(1)

这可能是让它发挥作用的最简单方法......(请参阅ned&#39答案,了解原始实施不起作用的原因)

答案 2 :(得分:1)

.py 文件生成要运行的字节码。请参阅 temp.py 旁边的 .pyc 文件。因此,一旦脚本运行,它就不会在 temp.py 中加载您的更改(使用 sed 命令创建的更改),直到您再次运行它。

我真的建议你另一种方法,你不使用无限循环,但是每次执行时都会接受一个参数的单个脚本,并将值发送到_lcd_string_方法。

类似的东西:

import sys

temp = sys.argv[1]
lcd_string("Temp: %s *C" % temp,LCD_LINE_1,1)

而不是 sed ,您可以运行:

python temp.py <your temperature>

答案 3 :(得分:0)

一个坏主意是每次迭代重新加载lcd.py,sed更新的新值将在保存(lcd.py文件)后起作用。代码如下,

select

请注意,不建议在实践中使用。