Нужна помощь в допиле скрипта для сканирования документов

Ответить

Автор темы
dreinakh
Сообщения: 16
Зарегистрирован: 14 сен 2014, 01:11

Нужна помощь в допиле скрипта для сканирования документов

#1

Сообщение dreinakh » 13 май 2016, 20:19

Доброго времени суток. Не от хорошей жизни пришлось навелосипедить себе скриптик для сканирования кучи бумажек. По мере использования его на моем компе гамадрилами из торгового отдела текст избавился почти от всех способов спалить сканер. Но теперь начальство требует отдать скрипт для пользования еще на 15 машинах угрожая карами всяческими и маня премией рационализаторской. Местные админы только ржут и вспоминают поговорку про инициативу. Помогите безграмотному оператору пк, а?

Проблема в том, что после сканирования листа каретка автоматически возвращается за ненулевое время, но при этом можно отправить следующий запрос на сканирование, это приводит к залипанию сканера с потенциально сгоревшим движком. Для себя решил тупо используя "sleep". Есть ли возможность проверки положения каретки и возврата ее в исходное положение? Очень уж не хочется общаться с сотрудничками.
код поделки прилагаю.

Код: Выделить всё

#!/bin/bash

#Скрипт для сканирования нескольких листов. Работает с одним сканером. нужны пакеты "sane", "imagemagick", "zenity"

#Создаем подпапку scan в месте расположения скрипта. Путь абсолютный.
TD="$(dirname $(readlink -f $0))/scan/"
if ! [ -d $TD ]
then 
 mkdir $TD
fi

cd $TD

if ! [ -f lock.t ]
then
  echo "1" > lock.t
else 
  echo "Запущена другая копия скрипта"
  exit 1
fi

#Переменная отвечает за нахождение сканера. 
SCA=$(scanimage -L | cut -d ' ' -f2 | cut -c 2-22)

TER=''
COU=0

while [[ $TER == '' ]]
do
  #дата и время начала сканирования, будет использовано в названии файла.
  TF=`date +%d-%m-%Y__%H-%M-%S`
  
   #сканирование и пережатие из .tiff в жопег с гуёвой напоминалкой
   (echo "# Сканируем"
   scanimage -d $SCA --format tiff --mode Gray -x 210 -y 297 --resolution 200  > scan_$TF.tiff
   mogrify -format jpg -quality 30 scan_$TF.tiff
   rm -f scan_$TF.tiff
   echo "50"

   echo "# возврат каретки"
   sleep 15
   echo "100") | zenity --progress --percentage=0 --auto-close --no-cancel

  let COU++

  #Гуй для сканирования следующего листа или выхода из главного цикла
  TER=$(zenity --title "Scaning" --entry --text "$COUй лист отсканирован. \n Нажмите ENTER для сканирования следующего листа. \n Для завершения введите любой текст и нажмите ENTER." --entry-text "");
  if [[ $? == 1 ]]
  then 
    TER="exi"
  fi
done

rm -f lock.t

exit 0


azmcrum
Сообщения: 75
Зарегистрирован: 12 авг 2015, 02:33

Re: Нужна помощь в допиле скрипта для сканирования документо

#2

Сообщение azmcrum » 23 май 2016, 20:18

Немного подправил, упростил:

Код: Выделить всё

#!/bin/bash

# Скрипт для сканирования нескольких листов.
# Работает с одним сканером. нужны пакеты "sane", "imagemagick", "zenity"

# Создаем подпапку scan в месте расположения скрипта. Путь абсолютный.

TD="$(dirname "$(readlink -f "$0")")/scan"
[ -d "$TD" ] || mkdir "$TD"
cd "$TD" || exit

[ -f ".lock_file" ] { echo "Запущена другая копия скрипта"; exit; }
: > ".lock_file"

# Переменная отвечает за нахождение сканера.
SCA=$(scanimage -L | cut -d ' ' -f2 | cut -c 2-22)

while :
do
  # дата и время начала сканирования, будет использовано в названии файла.
  TF="$(date +"%x__%X")"
 
   # сканирование и пережатие из .tiff в жопег с гуёвой напоминалкой
   (
   # Сканируем
   scanimage -d $SCA --format tiff --mode Gray -x 210 -y 297 --resolution 200  > scan_$TF.tiff
   mogrify -format jpg -quality 30 scan_$TF.tiff
   rm -f scan_$TF.tiff
   echo "50"

   # возврат каретки
   sleep 15
   echo "100"
   ) | zenity --progress --percentage=0 --auto-close --no-cancel

  let N+=1

  #Гуй для сканирования следующего листа или выхода из главного цикла
  zenity --question \
         --text "Отсканированно листов: $N\n\nОтсканировать следующий лист?\n\nEnter - Да\nEsc - Нет, и завершить цикл."
  [ $? = 0 ] || break

done

rm -f ".lock_file"
На счет каретки:
Сравни вывод

Код: Выделить всё

scanimage -d $SCA -T
при картеке в нулевом и ненулевом положении.
и если вывод различается, то вместо тупо слипа, можно сделать так:

Код: Выделить всё

READY_STATE="Вывод при состоянии "готов.""

# Цикл "пока НЕ". Сначала выполняется тело цикла,
# потом проверяется условие: FALSE - следующий цикл, TRUE - завершение цикла

until [ "$STATE" = "$READY_STATE" ]
do
	STATE="$(scanimage -d $SCA -T)"
	sleep 1
done

Ответить