pythonw.exe 无法将文件上传到 Amazon S3

pythonw.exe can't upload file to Amazon S3

我写了一个 Python 脚本,它以特定的时间间隔截取我的电脑屏幕截图并将该屏幕截图发送到我的 S3 存储桶。当我 运行 我的脚本使用 python 命令时,它工作,但是当我 运行 这个脚本作为后台任务使用 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

fname变量只包含没有路径信息的文件名。因此,您将文件保存到由 saveas 命名的路径,其中包含完整路径信息。当您打开 fname 时,它会尝试从当前目录加载它。问题不在于 python.exepythonw.exe 之间的区别,而在于您 运行 脚本的来源。在第一种情况下,您必须从 SaveDirectory 目录启动脚本。

感谢亚历克斯·泰勒。

启动后 pythonw.exe 程序找不到当前目录。 以下行已更改:

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