2016-07-12 10 views
0

私はPythonの新機能です。Python whileループは更新されません

センサーから現在の温度を表示しようとしていますが、これはbashスクリプトから取得します。私はsedを使用して、その文字列をLCDディスプレイに表示するPythonスクリプト(temp.py)の文字列を置き換えます。

残念ながら、temp.pyを実行すると、実行する温度が表示されますが、lcd.pyスクリプトは常に変更されています(温度は1つしか表示されません)。

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

25.123 temp.pyで絶えず変化しますが、異なる温度がLCDに示されていないいない

はそれを更新するために取得する方法はありますか?

+1

whileループのすべてがインデントされていると仮定しますか? – engineer14

+0

25.123はいつも変わっていると思いますか? –

+0

@JoranBeasley彼は_sed_コマンドでそれを変更しています – Hamlett

答えて

2

はあなたのsedスクリプト絶えずファイルを更新するには、(おそらくさておき、なぜあなただ​​けのpythonからのセンサのインターフェースアレントとしても、... sedを必要といけない?)"label.txt"と呼ばれている

、あなたのtemp.pyスクリプトで

おそらくちょうどそれを動作させるための最も簡単な方法です
while True: 
    lcd_string(open("label.txt").read(),LCD_LINE_1,1) 
    time.sleep(1) 

...(あなたの元の実装が機能しなかった理由として定義さの答えを参照してください)

+1

これは完全に機能しました。 – Ramirous

5

ディスク上の.pyファイルを変更しても、実行中のプログラムは変更されません。 .pyファイルは、プログラムの起動時に1回だけ読み込まれます。その後、プログラムが再び実行されるまで、.pyファイルは再び使用されません。

1

の.pyファイルは、実行するバイトコードを生成します。 ののの横の.pycファイルをご覧ください。したがって、スクリプトを実行すると、再度実行するまで、sedコマンドで行われた変更がtemp.pyにロードされません。

無限ループを使用しないで、実行されるたびに引数をとり、その値を_lcd_string_メソッドに送信する単一のスクリプトを使用する別の方法をお勧めします。

何かのように:

import sys 

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

、代わりのsedの次のコマンドを実行します。

python temp.py <your temperature> 
0

悪いアイデアは、すべての反復、SED意志によって更新され、新たに値をlcd.pyリロードすることです保存後に動作します(lcd.pyファイル)。コードは次のようになります。

while True: 
    reload(lcd) # <-------- 
    lcd_string("Temp: 25.123 *C",LCD_LINE_1,1) 
    time.sleep(1) 

実際にはお勧めしません。

+0

これはlcd.pyで動作していることを確認しています...このようなスクリプトをリロードできますか?私は決してこれを見たことがない...(私はあなたがこのようなインポートされたモジュールを再読み込みすることができます知っている) –

関連する問題