亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 屏幕截圖

Python 屏幕截圖

白衣非少年 2023-07-11 15:39:24
我正在嘗試編寫一個程序來使用全局熱鍵進行屏幕截圖。下面是對應的代碼:from datetime import datetimeimport osfrom pynput import keyboardimport pyautoguiimport pathlibdef on_activate():    today = datetime.now()    d = today.strftime("%Y-%m-%d-%H-%M-%S")    myScreenshot = pyautogui.screenshot(region=(200,200, 1720, 800))    time_stamp = '{:%y%d%m}'.format(today)    fpath = pathlib.Path("C:","Users","Desktop","TestScreenCap", time_stamp)    if not os.path.exists(fpath):        os.makedirs(fpath)    myScreenshot.save(pathlib.Path(fpath,d,".jpg"))def for_canonical(f):    return lambda k: f(l.canonical(k))hotkey = keyboard.HotKey(    keyboard.HotKey.parse('<ctrl>+<alt>+h'),    on_activate)with keyboard.Listener(        on_press=for_canonical(hotkey.press),        on_release=for_canonical(hotkey.release)) as l:    l.join()錯誤信息:Unhandled exception in listener callbackTraceback (most recent call last):  File "C:\Users\PycharmProjects\untitled1\venv\lib\site-packages\PIL\Image.py", line 2138, in save format = EXTENSION[ext]KeyError: ''The above exception was the direct cause of the following exception:Traceback (most recent call last):  File "C:\Users\PycharmProjects\untitled1\venv\lib\site-packages\pynput\_util\__init__.py", line 211, in inner    return f(self, *args, **kwargs)  File "C:\Users\PycharmProjects\untitled1\venv\lib\site-packages\pynput\keyboard\_win32.py", line 280, in _process self.on_press(key)  File "C:\Users\PycharmProjects\untitled1\venv\lib\site-packages\pynput\_util\__init__.py", line 127, in inner    if f(*args) is False:  File "C:/Users/PycharmProjects/untitled1/123.py", line 18, in <lambda>    return lambda k: f(l.canonical(k))  File "C:\Users\PycharmProjects\untitled1\venv\lib\site-packages\pynput\keyboard\__init__.py", line 182, in press
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

這里是固定代碼:


from datetime import datetime

import os

from pynput import keyboard

import pyautogui

import pathlib


def on_activate():

    today = datetime.now()

    d = today.strftime("%Y-%m-%d-%H-%M-%S")

    myScreenshot = pyautogui.screenshot(region=(200,200, 1720, 800))

    time_stamp = '{:%y%d%m}'.format(today)

    fpath = pathlib.Path("C:\\","Users","Desktop","TestScreenCap", time_stamp)

    if not os.path.exists(fpath):

        os.makedirs(fpath)

    myScreenshot.save(pathlib.Path(fpath,d + ".jpg"))


def for_canonical(f):

    return lambda k: f(l.canonical(k))


hotkey = keyboard.HotKey(

    keyboard.HotKey.parse('<ctrl>+<alt>+h'),

    on_activate)

with keyboard.Listener(

        on_press=for_canonical(hotkey.press),

        on_release=for_canonical(hotkey.release)) as l:

    l.join()

問題是您正在使用:


myScreenshot.save(pathlib.Path(fpath,d,".jpg"))


該函數pathlib.Path(fpath,d,".jpg")將字符串添加\到每個字符串的末尾,因此您嘗試保存文件的路徑是:


C:Users\Desktop\TestScreenCap\200309\2020-09-03-16-50-20\.jpg


正如您所看到的,文件名是引發異常的擴展名。


只需替換為:myScreenshot.save(pathlib.Path(fpath,d + ".jpg"))


指定路徑的另一個問題是它C:被解釋為Drive,所以當你保存函數時,保存到你的程序當前運行的路徑,而不是真正的指定路徑。要修復此部分,只需替換C:為C:\\.


閱讀您的代碼,我認為您希望將屏幕截圖保存在當前用戶桌面中,如果是這樣,請將行:替換為fpath = pathlib.Path("C:\\","Users","Desktop","TestScreenCap", time_stamp)并fpath = pathlib.Path(os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop'), time_stamp)在頂部添加import os. 有了這個,你就不需要關心這條道路的正確世代。


查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號