Это учебник для начинающих там.
Мы рассмотрим несколько способов автоматизации скрипта Python в фоновом режиме в Linux.
В какой-то момент жизни нашего разработчика мы обязательно столкнемся с ситуацией, когда нам нужно автоматизировать один или несколько скриптов, чтобы завершить задачу за нас.
Недавно я столкнулся с задачей, в которой была куча повторяющихся данных, которые нужно было исправить. Я сделал скрипт на Python для обработки процесса идентификации дублирования, манипулирования им и его удаления соответственно. Но это было сделано на небольшом наборе данных в локальной среде.
Наконец, дело дошло до запуска нескольких таблиц/индексов с большим набором данных, и я не мог просто сидеть и ждать, пока мой скрипт завершится, пока он выполнялся в сеансе терминала. Мне нужно было найти способ автоматизировать выполнение как фоновый процесс.
Хватит разговоров, давайте посмотрим код!
Наш базовый скрипт на Python, который принимает аргумент командной строки:
#!/usr/local/bin/python3 # Name: script.py argument = sys.argv[1] print("Hello automated script. Passed in argument: " + argument)
Теперь предположим, что я хочу запустить этот сценарий для нескольких аргументов.
Для этого я делаю еще один скрипт Python для «драйвера», например:
#!/usr/local/bin/python3 # Name: driver.py my_args = ['first', 'second', 'third'] for arg in my_args: os.system('python3 script.py ' + arg)
Наконец, мы подошли к автоматизации в Linux. Обязательно установите правильные разрешения для этих файлов, чтобы разрешить выполнение:
chmod +x driver.py
Теперь мы можем запустить скрипт с командой nohup, которая игнорирует сигнал отбоя. По сути, это означает, что мы можем закрыть терминал без прекращения выполнения из-за этого. И затем мы добавляем важный & в конце, который запускает скрипт в фоновом режиме:
nohup python3 driver.py &
Вывод этого файла будет сохранен внутри nohup.out по умолчанию, но мы можем указать для этого другой файл:
nohup python3 driver.py > /path/to/file.log &
После этого, чтобы найти процесс, работающий в фоновом режиме, мы можем увидеть его с помощью команды ps aux. Более конкретно, мы можем найти его:
ps aux | grep driver.py
Примечание. Выходные данные процесса будут доступны после завершения выполнения. Это связано с тем, что вывод буферизуется во время выполнения. Если мы хотим избежать этой буферизации и видеть вывод во время выполнения, мы можем добавить флаг -u:
nohup python3 -u driver.py > /path/to/file.log &
Спасибо за чтение, и я надеюсь, что это было просто и достаточно подробно для вас!