2016-12-02 21 views
0

私は1分ごとにスクリーンショットを撮るスクリプトに取り組んでいますが、私がそれを保存すると引数が無効になり、なぜそれがわからないのかという問題が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上にあると思われるのはなぜですか? 'r'D:\ mine''は存在しますか?ネットワークドライブで 'D:'はファイル名に ':'を許さないのですか? – dhke

+2

コードで違法なファイル名が作成されています。ファイル名には、Windowsでは ':'コロン文字を使用できません。 '.'(ピリオド)のように、それらを合法的なものに変更する必要があります。 – martineau

答えて

0

SAVE_PATHFILES_DIRがハードドライブに存在し、パスが絶対パスであることを確認してください。例えばLinuxではそれがD:\mine代わりのD:/minestrftime("%Y-%m-%d %H:%M:%S")である必要があり、あなたのケースで~/D/mineだろうあなたはトレースバックを含める必要がstrftime("%Y-%m-%d %H.%M.%S")

+0

はLinuxで非常に簡単です私は決して窓を開けませんでしたが、私の友人はそのスクリプトを必要としました。 –

+0

結局のところ、 'import os'はそれを処理する必要があります。問題は、 ':'の代わりに '.' ,,窓は結局は吸います –

関連する問題