Как отловить ошибку скрипта bash, которая запускается через скрипт python? - PullRequest
0 голосов
/ 21 февраля 2020

Я использую Airflow и у меня есть несколько скриптов python, один из которых запускает скрипт sh (1 или несколько). Для потока воздуха, даже если этот сценарий bash возвращает ошибку, он считает, что задача выполнена успешно.

Я хотел бы вернуть ошибку bash в моем сценарии python, когда поток воздуха заметит.

import glob
import os
from os import path
import subprocess

odsPath = '/apps/data/02_OS/'


for odsFolder in os.listdir(odsPath):
    if(odsFolder in fileNames):
        newPath = odsPath+odsFolder
        print('Script path: ', newPath)
        for foldFiles in os.listdir(newPath):
            if(foldFiles.endswith('sh')):
                print('Sh script can be launch: ', foldFiles)
            if(foldFiles.startswith('run') and foldFiles.endswith('.sh')):
                os.system('sh ' + newPath+'/'+foldFiles)
                print('Script: '+foldFiles+' executed')

В этом случае возникают ошибки bash, например, ' Неверное количество параметров '

Спасибо за помощь:)

1 Ответ

1 голос
/ 21 февраля 2020

os.system() запускает команду полностью вне контроля Python, хотя вы можете проверить его код возврата и raise ошибку в случае сбоя. Как предлагается в документации os.system, лучший подход, который дает вам больше контроля и меньше движущихся частей, это subprocess:

subprocess.run(['sh', os.path.join(newPath,foldFiles)],
    check=True)

* check=True вызывает повышение subprocess.CalledProcessError, если подпроцесс выходит из строя. Подробнее Выполнение Bash команд в Python

...