变量变化时的python信号?

时间:2014-12-20 14:11:26

标签: python variables

我有一个每秒计算一个变量的脚本(我的程序读取脚本bash的输出并每秒解释数据)。是否存在检测此var是否发生变化的方法?

这是我的代码的一部分,文本是ffmpeg或avconv输出,从vte终端读取:

#Terminal
def terminal(self):
        self.v = vte.Terminal()
        self.v.connect ("child-exited", lambda term: self.verif(self, my_class))
        self.v.connect('contents-changed', self.term_output)
        [...]    
def term_output(self, my_class, donnees=None):
        text = str(self.v.get_text(lambda *a: True).rstrip())
        [...] # decode the text
        print "time", self.time
        print "duration", self.duration

vte终端的返回(avconv输出):

Duration: 00:00:23.00, start: 0.100511, bitrate: 0 kb/s
Output #0, matroska, to '/media/guillaume/XT/Telechargements/uzz/la_qualite_de_l_air_1000019643.mkv':
Press [q] to stop, [?] for help
frame=  589 fps=115 q=-1.0 Lsize=    2191kB time=00:00:23.79 bitrate= 754.3kbits/s
FIN DU TRAITEMENT
Votre Fichier Final Est:
/media/guillaume/XT/Telechargements/uzz/la_qualite_de_l_air_1000019643.mkv

输出示例(来自vte输出的时间和持续时间):

time 5.1
duration 23.0
time 6.1
duration 23.0
time 9.1
duration 23.0
time 14.1
duration 23.0
time 14.1
duration 23.0
time 16.1
duration 23.0
time 18.1
duration 23.0
time 19.1
duration 23.0
time 21.1
duration 23.0
time 23.1
duration 23.0
time 23.1
duration 23.0
time 23.1
duration 23.0
time 23.1
duration 23.0
time 23.1
duration 3960.0 # detect this change? (correspond to a second output of avconv)
time 1.1
duration 3960.0
time 7.1
duration 3960.0
time 10.1
duration 3960.0
time 20.1
duration 3960.0
time 20.1
duration 3960.0 

1 个答案:

答案 0 :(得分:3)

添加标志变量(全局或本地,具体取决于所需的范围)。

在开始/第一个循环中将值分配给flag。

将此标志的值与变量进行比较,如果它发生变化,(无论是信号还是打印都需要)。

time_val = 'init';

def term_output(self, my_class, donnees=None):
    text = str(self.v.get_text(lambda *a: True).rstrip())
    [...] # decode the text
    if (time_val == 'init'):
        time_val = self.time
    if self.time != time_val:
        print "The value of time has changed from " + str(time_val) + " to " + str(self.time)
    print self.time