2017-03-26 7 views
0

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?

+0

Wie wissen Sie, es ist nicht das Skript ausgeführt wird? – tripleee

+0

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

+0

Versuchen Sie, '['sh', '-x', script] auszuführen, d. H. Fügen Sie die Option' -x' hinzu, um detaillierte Debugging-Ausgaben zu erhalten. – tripleee

Antwort

0

in der Regel ist es im Zusammenhang mit Benutzerrechten oder Fehlern in Pfad. Sie können Ihr .sh-Skript durch ein einfaches wie "echo" ersetzen, das ich gerade ausführe "" und prüfen, ob es erreichbar ist und ausgeführt wird. Wenn es unter Linux ist, hoffe ich, dass Sie Ausführungsrechte für Ihr Skript über chmod haben.

+0

Ich bin sehr neu in Linux, deshalb brauche ich einige Klarstellungen dazu. Ich habe die ".sh" -Datei mit dem Terminalfenster ausgeführt und es hat funktioniert. Das bedeutet, dass die Datei ".sh" Ausführungsrechte hat oder nicht? – viganqerimi

+0

Wenn Sie 'sh filename' ausführen, benötigen Sie nur Lesezugriff auf' filename'. Wenn Sie eine gültige Shebang-Zeile ('#!/Bin/sh') haben und die Berechtigung ausführen, können Sie sie mit'./Filename' ausführen, aber das ist nicht das, was das OP hier versucht. – tripleee

+0

Execute permission bedeutet, dass Sie 'chmod + x' gemacht haben, aber wie in meinem vorherigen Kommentar beschrieben, ist das hier nicht das Problem. – tripleee

0

Sie können sh-Datei ausführen, indem os-Modul wie folgt importieren:

import os 
os.system('sh filename.sh') 
+0

Muss ich einen Pfad angeben, in dem sich die ".sh" -Datei befindet, wie in meinem Beispiel? – viganqerimi

+0

ja, Sie müssen Ihre SH-Datei finden, es sei denn, es ist an der gleichen Stelle, wo Ihre Python-Datei. –

Verwandte Themen