Ich habe einen einfachen Python-Skript geschrieben, das angeblich eine ‚sh‘ Datei ausgeführt werden, wenn sie ausgeführt wird. Das Problem ist, dass das Skript ausgeführt wird, aber die ".sh" -Datei nicht gestartet wird. Wenn ich die ".sh" -Datei manuell mit "puffy" ausführe, wird der Job ausgeführt, aber nicht, wenn ich mein Python-Skript verwende. Also, was muss ich in meinem Skript ändern, damit es funktioniert?Python Script nicht „.sh“ Datei ausgeführt
Ich werde die Methoden unten veröffentlichen, damit Sie eine bessere Idee bekommen konnten. Ich benutze auch Python 3.3.5, Oracle Linux 6.8.
Die Methode, die die ".sh" Datei aufruft, habe ich Popen verwendet.
def runPrestage2Stage(self):
import time
time.sleep(60)
reload(Queries)
if "FINISHED" in Queries.statusS2S:
#run batch file
p = Popen(["sh", "/u01/app/Oracle_ODI_11/oracledi/agent/bin/start_prestage2stage_simple.sh"], stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
print("Prestage2Stage has started")
elif 'ERROR' in Queries.statusS2S:
print("Can not start Prestage Converter, please check runtime status of Stage Converter")
else:
print("Prestage2Stage Converter cannot be started")
Teil der Hauptmethode, die die Methode runPRestage2Stage aufruft.
DailyLoadsAutomation.DailyLoads.runPrestage2Stage(self)
load_paraprak_prestage = True
count2 = 0
while load_paraprak_prestage:
reload(Queries)
sleep(300) #waits 300 seconds (5 minutes) and re-checks load status.
if "FINISHED" in Queries.statusPreStage:
load_paraprak_prestage = False
else:
load_paraprak_prestage = True
if count2 == 8:
import sys
sys.exit()
else:
count2 += 1
print("PreStage is finished")
Als ich das Skript ausführen,
Es druckt „Prestage2Stage hat begonnen“ und „Prestage ist abgeschlossen“, wie es soll, aber es wird die „.sh“ Datei nicht ausgeführt .
Irgendeine Idee, was ist falsch?
Wie wissen Sie, es ist nicht das Skript ausgeführt wird? – tripleee
Ich weiß es, weil die ".sh" -Datei einen Job in ORACLE ODI (Datenintegrator) ausführt und ich den Laufzeitstatus dieses Jobs in der DB überprüfen kann. Aber als ich das Python-Skript ausführte, änderte es den Laufzeitstatus des ODI-Jobs nicht so, dass er "läuft", wie es sein sollte, wenn das "sh" -Skript lief. – viganqerimi
Versuchen Sie, '['sh', '-x', script] auszuführen, d. H. Fügen Sie die Option' -x' hinzu, um detaillierte Debugging-Ausgaben zu erhalten. – tripleee