Итак, у меня есть скрипт на python, который пытается автоматизировать всю процедуру сборки. Таким образом, он вызывает не только файлы python, но и сценарии оболочки, maven и т. Д. Поэтому мне нужен метод / процедура / библиотека для захвата выходных данных в stdout и stderr в файл журнала, при этом все еще выводя его на консоль, даже если вещь, печатающая на консоли, не является скриптом Python.
Мы работаем на машине с Linux, поэтому, делая это вручную, мы делаем script
, затем все команды, затем exit
. Но при попытке обернуть это в скрипт на python, кажется, что скрипт принимает команду оболочки и не позволяет мне запускать остальные мои команды до тех пор, пока я exit
первый.
Для подтверждения концепции, вот скрипт bash, который печатает число каждые полсекунды до 10.
print_nums.bash
#!/bin/bash
for i in {1..10}
do
echo "$i"
sleep 0.5
done
И вот что я хочу сделать.
test_script.py
import os
def main():
cmd1 = "script /some/arbitrary/path/logfile.txt"
cmd2 = "/path/to/print_nums.bash"
cmd3 = "exit"
os.system(cmd1)
os.system(cmd2)
os.system(cmd3)
if __name__ == '__main__':
main()
Я также изучил модуль журналирования, но кажется, что он легко записывает отпечатки python в журнал. Я могу ошибаться, и если есть интуитивный способ, я определенно был бы готов изменить методологии. Но, по сути, я хочу, чтобы в Python я мог эффективно сказать отсюда, что я хочу регистрировать вывод консоли, и на этом я хочу закончить ее логическое программирование.
Вы можете себе представить, что команда сборки и начальное тестирование могут занимать много времени, например, 15-20 минут, то есть долго ждать, пока консоль будет ждать без вывода, если вы только что сделали
some_command.bash > logfile.txt
.