Чтение вывода tail-f с заводным процессом - PullRequest
0 голосов
/ 20 апреля 2011

Привет, я хочу немного прочитать tail -f с отличным процессом, затем взять то, что я получил от него, и уничтожить процесс.Я делаю это в настройке «сторожевого класса» (то есть я выполняю процесс в начале теста и хочу получить данные после его завершения).

Проблемав том, что я ничего не получаю из процесса (process.in.text), хотя в файл, из которого я читаю, было записано много всего.

Я пытался узнать, пытался ли кто-нибудьраньше, но не смог найти ни одного хорошего ресурса по этому вопросу.

Вот код из начала и конца тестового сторожа:


  @Override
    void starting(FrameworkMethod method) {
        if (testCase.logs) {
            println "===> Fetching logs enabled."
            def commands = []
            pathMap.each {key, value ->
                String host = environmentEnvName.toLowerCase() + key.toString()
                value.each {it ->
                    commands.add "ssh ${user}@${host} tail -f '${it}'"
                }
            }
            println "===> Executing processes"
            commands.each {command ->
                procs.add command.execute()
            }
            println "===> ${procs.size()} processes exceuted"
        }
    }


    @Override
    void finished(FrameworkMethod method) {
        if (procs) {
            println "===> Ready to write files and destroy processes."

            def reportDate = new Date()
            procs?.eachWithIndex {proc, index ->
                def target = String.format("%s/target/${index}-%s.txt", userdir, reportDate.format("HHmm-ddMMyyyy"))
                if(proc.in.text){
                    new File(target).write(proc.in.text)
                }
                proc.destroy()
            }

            println "===> Log exerpts written. Processes destroyed."

        }
    }

1 Ответ

3 голосов
/ 21 апреля 2011

Process.getText() и InputSteam.getText() полностью читают ввод перед возвратом и не обязательно возвращают что-либо, если вы уничтожаете процесс.Вы можете обойти это, читая в выходной строке построчно или просто передавая поток непосредственно в выходной файл:

proc.in.newReader().eachLine { line ->
    // do something with line
}
// or
new File(target) << proc.in

Кстати, tail -f обычно используется интерактивно, а не программой.Если вы хотите установить дельту файла журнала до и после теста, было бы намного проще просто взять размер файла до, затем снова открыть файл и перейти к старому концу и начать чтение с него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...