Скрипт Python выполняется в скрипте bash. Ошибки не выводятся в файл журнала - PullRequest
1 голос
/ 02 июня 2019

В основном у меня есть скрипт python, который я запускаю на веб-странице, и он выводит контактный номер телефона, если он его находит.

То, что я пытаюсь закодировать, это bash-скрипт, который может автоматизировать его использование в списке URL-адресов. Который сохраняет результаты в файл, чтобы я мог видеть, какие URL-адреса дали телефонный контакт, а какие-нет. Я хочу, чтобы это было в одном и том же TXT-файле с каждым результатом URL в отдельной строке, чтобы я мог определить, какие URL дали какие результаты. EG

 $cat log.txt
 HTTPError: 404
 224 265 899
 HTTPError: 404
 847 718 9300, + 1, 662 538 6500

Проблема в том, что когда я запускаю свой bash-скрипт, ошибки http выводятся на экран, а номера телефонов печатаются в файл журнала. Это означает, что я не могу определить, какие URL дали какие результаты.

Итак, на данный момент мой bash-скрипт считывает файл URLS.txt в массив. Затем добавляет команду сценария в начало каждого URL в массиве. Затем, используя цикл for, выполняет каждую команду ..

Я пытался найти способ добавления строки в каждую строку log.txt при каждом выполнении команды python, но безуспешно. Если бы я мог сделать это, мне бы не понадобились ошибки, так как я мог бы определить, какие URL не сработали, потому что в каждой строке была бы строка, которая не давала результата.

Так что, если я установлю строку в "none?" log.txt будет выглядеть так

 none?
 none? 224 265 899
 none?
 none? 847 718 9300, + 1, 662 538 6500

Это код, который у меня есть после того, как я поместил URL-адреса в массив.

 scr1="python3 extract.py " 
 scr1arr1=( "${array1[@]/#/$scr1}" )
 for each1 in "${scr1arr1[@]}"
 do
 $each1 >> log.txt
 done

Так вот, что происходит на экране, когда я выполняю сценарий.

 HTTPError: 404
 HTTPError: 404 

и log.txt выглядит так

 224 265 8990, 
 847 718 9300, + 1, 662 538 6500

Я все делаю неправильно? / Неправильно подойти к проблеме ?? Я буквально провел дни, пытаясь решить это, я теряю сон из-за этого! Я очень новичок в кодировании, так что извините, если это уже было рассмотрено. Я искал много форумов по всему миру и не смог найти решение.

1 Ответ

1 голос
/ 02 июня 2019

Ваш скрипт, очевидно, печатает ошибки в stderr, а не в stdout, поэтому вам нужно добавить 2>&1, чтобы перенаправить stderr в тот же файл, что и stdout.Попробуйте это:

 for each1 in "${scr1arr1[@]}"
 do
    "$each1"
 done > log.txt 2>&1
...