2016-09-21 4 views
0

私は負荷以上5である時はいつでもデスクトップ通知を取得したいが、そのために私は、このPythonスクリプトを書かれているが、それは、誰かがこれを是正することができなぜこのpythonスクリプトが誤った出力を出しているのですか?awkとcomapringの値をifブロックで使用していますか?

#!/usr/bin/python 
import commands 

a=commands.getoutput("cat /proc/loadavg | awk '{print $1}'") 
float (a) 
print a 
if (a > 5.00): 
    commands.getoutput('notify-send "Hello world!" ') 
else: 
    print "load looks fine!!" 

を期待して反対与えていますか?

答えて

4

タイプキャストの浮動小数点値をaに戻す必要があります。変数が浮動小数点型であるかどうかを知ることができないため、コンソールへの普通の印刷物は欺かれることがあります。ですから、ファイルの最初のトークンは、Pythonでネイティブに実行するのは簡単です取得

#!/usr/bin/python 
import commands 

a = commands.getoutput("cat /proc/loadavg | awk '{print $1}'") 
a = float(a) # assign back to a 
print a, type(a) 
if a > 5.00: 
    commands.getoutput('notify-send "Hello world!" ') 
else: 
    print "load looks fine!!" 
+0

ohh !!!私はfloat()を呼び出すと型キャストされることを期待していました。おかげさまで – Rusty

+1

awookを呼び出すUUOCを持つサブプロセスは、本当にpythonでこれに正しいアプローチをしていますか?私はPythonを知らないのですが、少なくともファイルの内容を読むことができるようです。 –

+0

'open("/proc/loadavg ")を実行することができます。 – sisanared

1

を確認するためにtypeを使用することができます。 awk(それだけではなく、cat and awk)と呼ぶ理由はなく、この単純なことのためにサブプロセスチェーンを無駄に作成する必要はありません。

#!/usr/bin/env python 
import commands 
with open('/proc/loadavg') as load: 
    a = float(load.readline().split()[0]) 
if a > 5.00: 
    commands.getoutput('notify-send "Hello world!"') 
else: 
    print("load looks fine!!") 
関連する問題