2015-08-16 115 views
2

我寫了一個Python腳本,它以特定的時間間隔對我的電腦進行截圖,並將截圖發送到我的S3存儲桶。當我使用python命令運行我的腳本時,它可以工作,但是當我使用pythonw.exe命令將此腳本作爲後臺任務運行時,屏幕截圖捕獲操作可以正常工作 - 但是沒有任何內容上傳到S3。pythonw.exe無法將文件上傳到亞馬遜S3

這裏是我的代碼:

import os 
import sys 
import time 
import Image 
import ImageGrab 
import getpass 
import boto3 
import threading 
from random import randint 


s3 = boto3.resource('s3') 
username = getpass.getuser() 


#--------------------------------------------------------- 
#User Settings: 
SaveDirectory=r'C:\Users\Md.Rezaur\Dropbox\Screepy_App\screenshot' 
ImageEditorPath=r'C:\WINDOWS\system32\mspaint.exe' 

def capture_and_send(): 
    interval = randint(10,30) 
    threading.Timer(interval, capture_and_send).start() 
    img=ImageGrab.grab() 
    saveas=os.path.join(SaveDirectory,'ScreenShot_'+time.strftime('%Y_%m_%d_%H_%M_%S')+'.jpg') 
    fname = 'ScreenShot_'+time.strftime('%Y_%m_%d_%H_%M_%S')+'.jpg' 
    img.save(saveas, quality=50, optimize=True) 
    editorstring='""%s" "%s"'% (ImageEditorPath,saveas) 
    data = open(fname, 'rb') 
    s3.Bucket('screepy').put_object(Key=username+'/'+fname, Body=data) 

capture_and_send() 

如果您沒有配置您的AWS憑據,安裝AWS-CLI並運行以下命令:

aws configure 

回答

1

fname變量包含沒有路徑信息的文件名。因此,您將文件保存到由saveas指定的路徑中,該路徑包含完整路徑信息。當您打開fname時,它將嘗試從當前目錄加載它。問題不在於python.exepythonw.exe之間的差異,而是您從中運行腳本的位置。在第一種情況下,您必須從SaveDirectory目錄啓動腳本。

+0

非常感謝,它工作。 – Reza

2

感謝Alex Taylor。

啓動後,pythonw.exe程序找不到當前目錄。 以下行更改了:

data = open(SaveDirectory+'\\'+fname, 'rb')