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”。我应该怎么做才能解决它?
答案 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)