[PYTHON] GrabBox hat in Sierra nicht funktioniert

Überblick

Status

--GrabBox wurde erfolgreich eingescannt, aber die Bilddatei wird nicht in Dropbox gespeichert, selbst wenn ich eine Aufnahme mit ** Shift + Cmd + 4 ** mache

Korrespondenz

――Wenn Sie das Bild nach der Aufnahme in das angegebene Dropbox-Verzeichnis verschieben können, ist dies sinnvoll, da es das gleiche wie zuvor ist.

  1. Speichern Sie den Screenshot in einem bestimmten Verzeichnis
  2. Überwachen Sie ein bestimmtes Verzeichnis, um die Dateierstellung zu erkennen (Watchdog).
  3. Wenn es sich bei der erstellten Datei um ein Bild handelt, benennen Sie es in einen eindeutigen Namen um.
  4. Retine scheint die Bildgröße zu verdoppeln. Ändern Sie daher die Größe auf 1/2 (Kissen).
  5. Verschieben Sie das Bild in der Größe in das GrabBox-Verzeichnis von Dropbox
  6. Generieren Sie eine öffentliche URL für Dropbox
  7. Kopieren Sie die öffentliche URL in die Zwischenablage (pbcopy).

Der Inhalt des Skripts sieht folgendermaßen aus

move2dropbox.py


# -*- coding: utf-8 -*-
import time
import os
import uuid
import shutil
import subprocess

from PIL import Image
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

here = os.path.abspath(os.path.dirname(__file__))
HOME_DIR = os.path.expanduser('~')

SCREENSHOT_DIR = os.path.join(here, 'screenshot')
DROPBOX_DIR = os.path.join(HOME_DIR, 'Dropbox', 'App', 'GrabBox')
DROPBOX_URL = 'https://dl.dropboxusercontent.com/spa/xxxxxxxxx/'

CMD_LOCATION = 'defaults write com.apple.screencapture location {}'.format(SCREENSHOT_DIR)  # NOQA
CMD_NAME = 'defaults write com.apple.screencapture name "grabox"'
CMD_KILLALL = 'killall SystemUIServer'


def resize_for_retina(imgfile):
    img = Image.open(imgfile)
    resized = img.resize([int(0.5 * s) for s in img.size])
    resized.save(imgfile)


class MyHandler(FileSystemEventHandler):
    def on_created(self, event):
        for img in os.listdir(SCREENSHOT_DIR):
            if not img.endswith('.png'):
                continue
            new_img = '{}.png'.format(uuid.uuid4().hex)
            resize_for_retina(os.path.join(SCREENSHOT_DIR, img))
            shutil.move(
                os.path.join(SCREENSHOT_DIR, img),
                os.path.join(DROPBOX_DIR, new_img)
            )
            subprocess.call(
                'echo "{}" | pbcopy'.format(DROPBOX_URL + new_img),
                shell=True
            )

if __name__ == "__main__":
    if not os.path.exists(SCREENSHOT_DIR):
        os.makedirs(SCREENSHOT_DIR)

    subprocess.call(CMD_LOCATION, shell=True)
    subprocess.call(CMD_NAME, shell=True)
    subprocess.call(CMD_KILLALL, shell=True)

    observer = Observer()
    observer.schedule(MyHandler(), path=SCREENSHOT_DIR, recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

Erstellen Sie schließlich ein Shell-Skript, das dieses Skript im Hintergrund trifft

move2dropbox.command


nohup python /path/to/move2dropbox.py > /dev/null 2>&1 &

** Fügen Sie die Erweiterung ".command" ** hinzu und registrieren Sie sie in ** "Systemumgebung> Benutzer und Gruppen> Anmeldeelemente" **

79875dc4b71446639623ade7b08f0421.png

Wenn Sie sich jetzt anmelden, wird das obige Überwachungsskript ohne Erlaubnis ausgeführt.

Zusammenfassung

――Bitte teilen Sie uns jetzt Ihr empfohlenes Erfassungstool mit (dringend)

Nachtrag (31.10.2016)

Liste der empfohlenen

Ende

Recommended Posts

GrabBox hat in Sierra nicht funktioniert
Fcitx funktioniert nicht mit Flatpak
Installieren Sie Scipy unter Mac OS Sierra
LocateCenterOnScreen funktioniert nicht mit PyAutoGui
Pygame funktioniert nicht unter macOS Mojave
Installieren Sie Java2Python unter macOS High Sierra (10.13)
Ich habe versucht, Docker unter Windows 10 Home zu installieren, aber es hat nicht funktioniert