Как автоматически запускать скрипт в tcl при появлении файла в каталоге?

#tcl

#tcl

Вопрос:

У меня есть готовый скрипт в tcl для запуска, но до сих пор я делаю это вручную, потому что мне нужно дождаться завершения генерации некоторого файла.

Как автоматизировать этот процесс, чтобы при появлении файла сценарий tcl запускался автоматически?

Комментарии:

1. Если вы используете Linux, доступен пакет inotify.

2. Да, я использую Linux. Я рассмотрю то, что вы предложили. Спасибо!

3. Проблема в том, что мне не разрешено добавлять какой-либо внешний пакет как таковой. Итак, если у вас есть какой-либо альтернативный способ, пожалуйста, проведите меня через это.

Ответ №1:

Предполагая, что в просматриваемом каталоге обычно нет файлов, это эффективный способ периодического опроса каталога:

 proc waitForFiles {directory} {
    set files [glob -directory $directory -nocomplain]
    if {[llength $files] == 0} {
        doSomethingHere
    }
    # check again in 100 milliseconds
    after 100 [list waitForFiles $directory]
}
 

Комментарии:

1. Команда after, которую я узнал из этого комментария, полезна, но что, если я ожидаю определенное имя файла, и если этот файл появится, я продолжу свой следующий сценарий / команду оттуда. Могу ли я интегрировать эту концепцию в вышеупомянутый код?

2. Измените условие на if {$expectedFile in $files} или if {[file exists [file join $directory $expectedFile]]}

3. Большое спасибо, Гленн, за быстрый ответ!! Это сработало.

4. Если вы точно знаете, какой файл будет вызываться, file exists или file readable это приемлемый выбор, и оба они дешевле, чем glob .