與PIL

2016-12-02 52 views
0

截取屏幕截圖我工作的腳本採取截圖每次1分鐘,但有一個問題,當我保存它給了我無效的參數,我不知道這是爲什麼。與PIL

代碼:

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) 

我忘記了一些東西,但我不知道它是什麼。

+4

您需要包括回溯。沒有這個,我們不知道這個問題是什麼。 –

+0

當它看起來像在Windows上時,它爲什麼是'D:/'?是否存在「我的」存在?在網絡驅動器中是'D:',在文件名中不允許使用':'。 – dhke

+2

代碼正在創建非法文件名。 Windows上的文件名不能包含「:」冒號。你將不得不將它們改爲合法的,比如'.'(句號)。 – martineau

回答

0

確保SAVE_PATHFILES_DIR是他們在你的硬盤驅動器存在和路徑應該是絕對路徑有效的含義。例如在Linux中它會在你的情況~/D/mine應該D:\mine而不是D:/minestrftime("%Y-%m-%d %H:%M:%S")應該strftime("%Y-%m-%d %H.%M.%S")

+0

在Linux中是很容易的,我從來沒有打開的窗口,但我的朋友需要的腳本,所以我幫他 –

+0

我明白了,畢竟,'進口os'應該有句柄日,問題是隨着時間的格式,你不得不把' .'而不是':',窗戶很糟糕,沒有冒犯性 –