Автоматически открывать вновь сохраненный файл изображения со сканера с помощью команд терминала

Я хочу начать сканирование с терминала и автоматически просмотреть изображение после его завершения. Как я могу сделать это, не зная сохраненного имени файла? В настоящее время я использую Ubuntu 16.04 LTS локально на своем ноутбуке, который подключен через USB к моему сканеру.

Я написал следующую терминальную команду; однако проблема заключается в том, что если во время процесса сканирования прошло более одной минуты, Eye of Gnome не может найти файл изображения, и я получаю сообщение об ошибке:

scanimage --format=tiff > ~/Pictures/$(date +%Y%m%d_%H%M).tiff && sleep 5 ; eog --fullscreen ~/Pictures/$(date +%Y%m%d_%H%M).tiff

Например, файл изображения будет сохранен как 20170128_2314.tiff, но Eye of Gnome или EOG будут искать 20170128_2315.tiff что привело к ошибке. И в зависимости от настройки разрешения сканера сканирование может занять от 1 до 5 минут от начала до конца.

Файлы изображений в настоящее время сохраняются в моем домашнем каталоге ~/ папке с изображениями.

Любая помощь или вклад будет принята с благодарностью.

2 ответа

Решение

Откройте последний файл в каталоге с его приложением по умолчанию

Сценарий ниже откроет последний файл внутри вашего ~/Pictures каталог. Независимо от того, как назван файл или когда запускается скрипт.

Конечно, вы можете установить любой другой каталог для использования или любое приложение, чтобы открыть файл.

Сценарий

#!/usr/bin/env python3
import subprocess
import os
from operator import itemgetter

dr = os.path.join(os.environ["HOME"], "Pictures")
files = [os.path.join(dr, f) for f in os.listdir(dr)]
latest = sorted([[f, os.path.getmtime(f)] for f in files], key=itemgetter(1))[-1][0]
subprocess.Popen(["xdg-open", latest])

Использовать

  1. Скопируйте скрипт в пустой файл, сохраните его как open_latest.py
  2. Запустить его:

    python3 /path/to/open_latest.py
    

    и последний файл будет открыт приложением по умолчанию.

Заметки

  • Чтобы использовать другой каталог, измените строку

    dr = os.path.join(os.environ["HOME"], "Afbeeldingen")
    

    в например

    dr = "/path/to/dir"
    

    но не используйте такие пути, как $HOME, которые не работают в питоне

  • Чтобы использовать конкретное приложение вместо приложения по умолчанию, измените строку:

    subprocess.Popen(["xdg-open", latest])
    

    в например

    subprocess.Popen(["eog", latest])
    

объяснение

Сценарий:

  • определяет каталог изображений внутри вашего $HOME каталог:

    dr = os.path.join(os.environ["HOME"], "Pictures")
    
  • перечисляет файлы:

    files = [os.path.join(dr, f) for f in os.listdir(dr)]
    
  • сортирует файлы по дате модификации (os.path.getmtime(f)), получите последнюю версию:

    latest = sorted([[f, os.path.getmtime(f)] for f in files], key=itemgetter(1))[-1][0]
    
  • откройте файл с приложением по умолчанию:

    subprocess.Popen(["eog", latest])
    

Почему бы не сохранить имя файла в переменной перед отправкой scanimage:

filename=~/Pictures/$(date +%Y%m%d_%H%M).tiff
scanimage --format=tiff > "$filename" && sleep 5
eog --fullscreen "$filename"

(Я делю его на несколько строк для удобства чтения, но вы можете комбинировать команды с ; как вы делали раньше.)

Другие вопросы по тегам