使用 PIL 截屏
Taking screenshots with PIL
我正在编写每 1 分钟截取一次屏幕截图的脚本,但存在一个问题,即当我保存它时会出现无效参数,我不知道为什么会这样。
代码:
from PIL import ImageGrab
from PIL import Image
import time
import datetime
import os
def screenShot():
while True:
try:
date = str(datetime.date.today())
hour=str(datetime.datetime.now().strftime("%H"))
os.makedirs("D:/mine/" + date + "/" + hour)
except OSError,e:
if e.errno != 17:
raise
time.sleep(1)
pass
while True:
date = str(datetime.date.today())
hour = str(datetime.datetime.now().strftime("%H"))
date_time = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
img = ImageGrab.grab()
FILES_DIR = 'mine'
SAVE_PATH = "D:/"
LOGFILE_NAME = "%s.png" % date_time
LOGFILE_PATH = os.path.join(SAVE_PATH, FILES_DIR, LOGFILE_NAME)
img.save(LOGFILE_PATH)
break
time.sleep(60)
screenShot()
这是我遇到的错误:
IOError: [Erno 22] Invalid argument: 'D:/mine\2016-12-02 20:24:37.png'
我搜索了很多,找到了这段代码并且它有效,但我看不出这段代码和我的代码有什么不同。
import os
import sys
import time
from PIL import ImageGrab
from PIL import Image
from os import environ
import random
n = -1
while True:
n += 1
# generate a random time between 120 and 300 sec
random_time = random.randrange(1,2)
# wait between 120 and 300 seconds (or between 2 and 5 minutes)
print "Next picture in: %.2f minutes" % (float(random_time) / 60)
time.sleep(random_time)
img = ImageGrab.grab()
FILES_DIR = 'mine'
SAVE_PATH = "D:/"
#SAVE_PATH = os.path.expanduser("~") #It is cross-platform
LOGFILE_NAME = "test{n:0>5}.png".format(n = n)
LOGFILE_PATH = os.path.join(SAVE_PATH, FILES_DIR, LOGFILE_NAME)
print LOGFILE_PATH
img.save(LOGFILE_PATH)
我忘记了什么,但我不知道是什么。
确保 SAVE_PATH
和 FILES_DIR
是有效的,意味着它们存在于您的硬盘中并且路径应该是绝对路径。例如在 linux 中应该是 ~/D/mine
在你的情况下它应该是 D:\mine
而不是 D:/mine
而且 strftime("%Y-%m-%d %H:%M:%S")
应该是 strftime("%Y-%m-%d %H.%M.%S")
D:/mine16-12-02 20:24:37.png。如果它有“/”和“\”,你一定是格式化错误了。而且,和其他人一样:你不能用冒号创建文件。
我正在编写每 1 分钟截取一次屏幕截图的脚本,但存在一个问题,即当我保存它时会出现无效参数,我不知道为什么会这样。
代码:
from PIL import ImageGrab
from PIL import Image
import time
import datetime
import os
def screenShot():
while True:
try:
date = str(datetime.date.today())
hour=str(datetime.datetime.now().strftime("%H"))
os.makedirs("D:/mine/" + date + "/" + hour)
except OSError,e:
if e.errno != 17:
raise
time.sleep(1)
pass
while True:
date = str(datetime.date.today())
hour = str(datetime.datetime.now().strftime("%H"))
date_time = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
img = ImageGrab.grab()
FILES_DIR = 'mine'
SAVE_PATH = "D:/"
LOGFILE_NAME = "%s.png" % date_time
LOGFILE_PATH = os.path.join(SAVE_PATH, FILES_DIR, LOGFILE_NAME)
img.save(LOGFILE_PATH)
break
time.sleep(60)
screenShot()
这是我遇到的错误:
IOError: [Erno 22] Invalid argument: 'D:/mine\2016-12-02 20:24:37.png'
我搜索了很多,找到了这段代码并且它有效,但我看不出这段代码和我的代码有什么不同。
import os
import sys
import time
from PIL import ImageGrab
from PIL import Image
from os import environ
import random
n = -1
while True:
n += 1
# generate a random time between 120 and 300 sec
random_time = random.randrange(1,2)
# wait between 120 and 300 seconds (or between 2 and 5 minutes)
print "Next picture in: %.2f minutes" % (float(random_time) / 60)
time.sleep(random_time)
img = ImageGrab.grab()
FILES_DIR = 'mine'
SAVE_PATH = "D:/"
#SAVE_PATH = os.path.expanduser("~") #It is cross-platform
LOGFILE_NAME = "test{n:0>5}.png".format(n = n)
LOGFILE_PATH = os.path.join(SAVE_PATH, FILES_DIR, LOGFILE_NAME)
print LOGFILE_PATH
img.save(LOGFILE_PATH)
我忘记了什么,但我不知道是什么。
确保 SAVE_PATH
和 FILES_DIR
是有效的,意味着它们存在于您的硬盘中并且路径应该是绝对路径。例如在 linux 中应该是 ~/D/mine
在你的情况下它应该是 D:\mine
而不是 D:/mine
而且 strftime("%Y-%m-%d %H:%M:%S")
应该是 strftime("%Y-%m-%d %H.%M.%S")
D:/mine16-12-02 20:24:37.png。如果它有“/”和“\”,你一定是格式化错误了。而且,和其他人一样:你不能用冒号创建文件。