我想从终端启动扫描并查看图像自动地完成后。如果不知道保存的文件名,我该怎么做?我目前在笔记本上本地运行 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 分钟。
图像文件当前正在保存到我的主目录 ~/Pictures 文件夹中。
任何帮助或意见都将不胜感激。
答案1
使用默认应用程序打开目录中的最新文件
下面的脚本将打开~/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])
使用
- 将脚本复制到一个空文件中,另存为
open_latest.py
运行:
python3 /path/to/open_latest.py
并且最新的文件将通过其默认应用程序打开。
笔记
要使用其他目录,请将行
dr = os.path.join(os.environ["HOME"], "Afbeeldingen")
例如
dr = "/path/to/dir"
但不要使用像 这样的路径
$HOME
,这在 python 中不起作用要使用特定应用程序而非默认应用程序,请更改以下行:
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])
答案2
为什么不在将文件名发送到之前将其保存到变量中scanimage
:
filename=~/Pictures/$(date +%Y%m%d_%H%M).tiff
scanimage --format=tiff > "$filename" && sleep 5
eog --fullscreen "$filename"
(为了便于阅读,我将其分成多行,但您可以;
像之前一样组合这些命令。)