我的'if int(time.time())%2 == 0:'

时间:2019-03-18 07:35:28

标签: python

start = int(time.time())

while True:  

    if int(time.time()) % 2 == 0:
        img = ImageGrab.grab()
        saveas = 'screenshot' + str(int(time.time())) + '.png'
        img.save(saveas)

    elif start + 30 == int(time.time()):
        break

结果:https://i.stack.imgur.com/Aqdv6.png

大家好这是一个简单的代码,但无法正常工作。 我想每2秒保存一次屏幕截图。 但结果是,我有一些奇怪的第二文件,例如“ screenshot1552893309.png”。我应该怎么做才能解决它?

3 个答案:

答案 0 :(得分:5)

这是因为“时光飞逝”。

while循环的每次迭代最多调用time.time() 3次。

每次调用time.time()都会返回给定调用的UNIX时间。在您的代码中,每个调用可以在不同的秒调用(从而返回不同的时间戳)。

例如,考虑这种情况:time.time()的{​​{1}}返回if int(time.time()) % 2 == 0:,因此满足条件,但是下一个调用返回1552893308.0,这将保留其跟踪文件名。

相反,您可能希望每个迭代仅调用一次1552893309.0,然后使用该时间戳做您想做的事情。

time.time()

请注意start = int(time.time()) while True: current_time = int(time.time()) if current_time % 2 == 0: img = ImageGrab.grab() saveas = 'screenshot' + str(current_time) + '.png' # or you can also say # saveas = f'screenshot{current_time}.png' img.save(saveas) elif start + 30 <= current_time: break 中布尔运算符的更改。 elif似乎太容易发生无限循环。

还要注意f字符串的注释用法,它是在Python 3.6中引入的

答案 1 :(得分:0)

Log exports

答案 2 :(得分:0)

time(用于检查偶数的位置)和time(用于保存图像的位置)将有所不同,因为它们位于不同的语句中。您可以在每次迭代中保存当前时间,并在图像文件名中使用保存的时间(如果它是偶数)。

示例代码:

while True:  
    t = int(time.time())
    if t % 2 == 0:
        img = ImageGrab.grab()
        saveas = 'screenshot' + str(t) + '.png'
        img.save(saveas)