Добавлен мониторинг папки для .jpg, автоматическая печать с использованием CUPS, перемещение того же .jpg в другую папку - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь создать сценарий автоматической печати открыток на моем Raspberry Pi 3B с использованием Python 2.7. Я хочу, чтобы скрипт постоянно выполнялся в фоновом режиме, проверяя наличие новых файлов .jpg, которые были помещены в папку, автоматически печатал ВСЕ .jpg, помещенные в папку, на принтер с помощью CUPS / pycups, а затем перемещал файл .jpg в другую папку с именем. "СДЕЛАННЫЙ." Следующий код не работает: но выдает «lp: Error - невозможно получить доступ к« test.jpg »- нет такого файла или каталога». Цени любую помощь!

#!/usr/bin/env python

import cups
import os
import time
import subprocess
from glob import glob
import shutil


conn = cups.Connection()
printers = conn.getPrinters()
printer_name = printers.keys()[0]
cups.setUser('pi')

path_to_watch = ('/home/pi/Desktop/PRINT/')

source = path_to_watch
dest1 = '/home/pi/Desktop/DONE'

before = dict ([(f, None) for f in os.listdir (path_to_watch)])
while 1:
    time.sleep (10)
    after = dict ([(f, None) for f in glob(path_to_watch + '*.jpg')])
    added = [f for f in after if not f in before]
    removed = [f for f in before if not f in after]
    if added:
        print "Added: ", ", ".join (added)
        subprocess.Popen(["lp", "--"] + added).communicate()
        shutil.move(source+f, dest1)
    if removed: print "Removed: ", ", ".join (removed)
    before = after

ИЗД. То есть, когда я в первый раз запускаю программу, она выполняет ПЕЧАТЬ любого файла .jpg, уже находящегося в папке, затем перемещает файлы .jpg из папки PRINT в ГОТОВО, но затем, когда я помещаю НОВЫЙ файл .jpg в папку PRINT, это дает мне эта ошибка и выходит из скрипта:

  File "print2.py", line 30, in <module>
    shutil.move(source+f, dest1)
  File "/usr/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/usr/lib/python2.7/shutil.py", line 130, in copy2
    copyfile(src, dst)
  File "/usr/lib/python2.7/shutil.py", line 82, in copyfile
    with open(src, 'rb') as fsrc:
IOError: [Errno 2] No such file or directory: '/home/pi/Desktop/PRINT//home/pi/Desktop/PRINT/test.jpg'

Еще совет? Спасибо!

1 Ответ

0 голосов
/ 08 января 2019

Ошибка lp возникает потому, что она не может найти test.jpg в текущем каталоге, который, вероятно, является каталогом, из которого вы запускаете этот скрипт Python. Причина этого в том, что список строк, возвращаемых os.listdir, содержит только имя файла каталога, но не сам полный путь.

>>> os.listdir('/tmp/foo/bar')
['file5.jpg', 'file4.jpg', 'file3.jpg', 'file2.jpg', 'file1.jpg', 'file5', 'file4', 'file3', 'file2', 'file1']

Обратите внимание, что все файлы перечислены без предшествующего каталога, а не только jpg файлов, которые вам могут понадобиться. Один из возможных способов исправить это - присоединить значение path_to_watch для каждого из значений, возвращаемых os.listdir (чтобы у lp был полный, однозначный путь к предполагаемому файлу), а также отфильтровать результат по jpg, но тогда я заметил, что вы импортировали glob. Этот модуль предоставляет функцию glob, которая должна предоставить именно то, что вам нужно, попробуйте:

>>> from glob import glob
>>> glob('/tmp/foo/bar/*.jpg')
['/tmp/foo/bar/file5.jpg', '/tmp/foo/bar/file4.jpg', '/tmp/foo/bar/file3.jpg', '/tmp/foo/bar/file2.jpg', '/tmp/foo/bar/file1.jpg']

Обратите внимание, как включен полный путь. Чтобы интегрировать это в свой код, вы можете попробовать:

before = dict ([(f, None) for f in glob(path_to_watch + '*.jpg')])
...