web-dev-qa-db-ja.com

ターミナルコマンドを介してスキャナーから新しく保存された画像ファイルを自動開く

端末からスキャンを開始し、完了時に画像を表示したい自動的に。保存されたファイル名を知らなくても、どうすればこれを行うことができますか?私は現在、USB経由でスキャナーに接続されているノートブックでUbuntu 16.04LTSをローカルで実行しています。

次のターミナルコマンドを作成しました。ただし、問題は、スキャンプロセス中に1分以上経過すると、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 ofGnomeまたはEOGは20170128_2315.tiffを検索し、エラーが発生します。また、スキャナーの解像度設定によっては、スキャンの開始から終了まで1〜5分かかる場合があります。

画像ファイルは現在、私のホームディレクトリ〜/ Picturesフォルダに保存されています。

任意のヘルプや入力をいただければ幸いです。

1
RPeezey

デフォルトのアプリケーションでディレクトリ内の最新のファイルを開きます

以下のスクリプトは、_~/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"
    _

    ただし、Pythonでは機能しない_$HOME_のようなパスは使用しないでください

  • デフォルトのアプリケーションの代わりに特定のアプリケーションを使用するには、次の行を変更します。

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

    例に.

    _subprocess.Popen(["eog", latest])
    _

説明

スクリプト:

  • _$HOME_ディレクトリ内のPicturesディレクトリを定義します。

    _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])
    _
1
Jacob Vlijm

scanimageに送信する前に、ファイル名を変数に保存してみませんか。

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

(読みやすくするために複数行に分割しましたが、以前と同じようにコマンドを;と組み合わせることができます。)

0
muru