2017-03-14 5 views
1

Ich habe ein Python-Skript, das ein paar Subprozesse ausführt.Fehler beim Schreiben von Subprozess-PID in eine Protokolldatei

Was ich versuche zu erreichen ist, dass ich die Subprozess-Prozess-IDs in eine separate Protokolldatei schreiben möchte. Der Subprozess kann nur wenige Stunden laufen, daher möchte ich ihn mit den PIDs verfolgen.

Irgendwie kann ich die PIDs nicht in eine Protokolldatei schreiben, da ich auf Ausnahmen stoße.

tmprocess = subprocess.Popen(['sudo', logstashbin, '-f', tmconf], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
tmprocess.wait() 
segmentprocess = subprocess.Popen(['sudo', logstashbin, '-f', segmentconf], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).pid 
print segmentprocess 

try: 
    pidfile = open("pid.log", "a+") 
    try: 
     pidfile.write(segmentprocess) 
    finally: 
     pidfile.close() 
except: 
    raise IOError("Error") 

Dies ist die Ausgabe I, erhalten

1237 
Traceback (most recent call last): 
    File "./init.py", line 285, in <module> 
    main(sys.argv[1:]) 
    File "./init.py", line 282, in main 
    init(arg) 
    File "./init.py", line 264, in init 
    run_logstash(langPath) 
    File "./init.py", line 228, in run_logstash 
    raise IOError("Error") 
IOError: Error 

Obwohl die PID gedruckt wird, wird es nicht in die Datei geschrieben zu werden. Hinweis: Wenn ich nur eine zufällige Zeichenfolge in die Protokolldatei schreiben, indem ich "segmentprocess" ersetze, funktioniert es. Es ist also nichts falsch mit der Datei öffnen.

+1

Ihre Vertiefung falsch aussieht. Kannst du das überprüfen? Außerdem scheint der von Ihnen bereitgestellte Stack-Trace eine andere Ausnahme auszulösen als in Ihrem Code. Gibt es etwas, was wir nicht sehen? Können Sie den von Ihnen bereitgestellten Zeilennummernbereich angeben? Versuchen Sie außerdem, die Ausnahme zu debuggen, warum eine andere Ausnahme erneut auslösen? Lassen Sie die echte Ausnahme einfach platzen und posten Sie sie hier. Fange es nicht, und wenn du es tust, achte darauf, dass du einfach wieder "anhebst". anstelle von 'raise IOError (" Error ")'. –

+0

@JamieCounsell, vielen Dank für den Kopf. Ich habe die fehlerhafte Einrückung oben in meinem Post behoben (mein ursprünglicher Code hat kein schlechtes Einrückungsproblem). Ich habe den Fehler behoben, es war nicht schlau von mir, den Fehler zu finden. Als ich den Versuch entfernte, außer Block, sah ich den tatsächlichen Fehler "TypeError: erwartet ein Zeichenpuffer-Objekt". Ich musste nur noch tippen und der Fehler verschwand. So ein Noob-Fehler. Ich denke, ich bin besser, diesen Beitrag zu löschen? Danke nochmal für deine Hilfe. – Vinod

+1

Froh, dass du es herausgefunden hast! Ich habe meinen Kommentar als Antwort gepostet. Löschen Sie den Beitrag oder markieren Sie ihn als gelöst. –

Antwort

1

Die Stack-Ablaufverfolgung, die Sie bereitgestellt haben, scheint eine andere Ausnahme als in Ihrem Code zu werfen. Gibt es etwas, was wir nicht sehen? Können Sie den von Ihnen bereitgestellten Zeilennummernbereich angeben? Versuchen Sie außerdem, die Ausnahme zu debuggen, warum eine andere Ausnahme erneut auslösen? Lassen Sie die echte Ausnahme einfach platzen und posten Sie sie hier. Fange es nicht, und wenn du es tust, vergewissere dich, dass du wieder nur raise hast. Statt

raise IOError("Error") 

Sie sollten nur

raise 

Oder auch nicht versuchen,/außer an alle:

pidfile = open("pid.log", "a+") 
try: 
    pidfile.write(segmentprocess) 
finally: 
    pidfile.close() 
Verwandte Themen