2016-08-19 3 views
0

Ich möchte die stdout und stderr in zwei verschiedenen Protokolldateien ausgeben. Ich habe diesen Code versucht, aber es gibt nur den Fehler in Fehlerprotokoll aus, aber die Ausgabe wird nicht zur Datei runtime.log umgeleitet.Windows Python stdout und stderr zu zwei verschiedenen Dateien

Der Code wird auf Windows ausgeführt und meistens ist Robocopy im Code ausgeführt.

saveerr = sys.stderr 
fsock = open('error.log', 'a') 
sys.stderr = fsock 

saveout = sys.stdout 
fsock1 = open('runtime.log', 'a') 
sys.stdout = fsock1 

Der Bereich sys.stdout funktioniert nicht. Bitte lassen Sie mich eine Korrektur in diesem Code wissen.

hier ist meine gesamte Code

import sys 

saveerr = sys.stderr 
fsock = open('error.log', 'a') 
sys.stderr = fsock 

saveout = sys.stdout 
fsock1 = open('runtime.log', 'a') 
sys.stdout = fsock1 

##For site AUCB-NET-01 from source folder AUDC-RSTOR-01 E:\Canberra 
exit_code1 = subprocess.call('robocopy \\\\aucb-net-01\\d$ \\\\nasaudc01\\remote_site_sync\\aucb-net-01 /E /MIR /W:2 /R:1', shell=True) 
print ("exitcoode1=", exit_code1) 

Dank an alle für meine Post lesen.

+1

Wie starten Sie Robocopy? (Und warum ist diese 'PowerShell' markiert?) – TessellatingHeckler

+0

Dies sollte * Ihr * stdout zu runtime.log umleiten. Wenn Sie robocopy starten, sollten Sie das stdout in die Datei umleiten. Poste den Code, den du benutzt, um Robocopy zu starten – FloatingKiwi

Antwort

3

Wie in meinem Kommentar erwähnt, sollte Ihr Code Ihre stdout in die Datei umleiten. Robocopy ist stdout zu gehen dort zu bekommen echo nur jede Zeile in stdout wie in diesem Link

gezeigt

https://stackoverflow.com/a/28319191/6550457


from subprocess import Popen, PIPE 
import sys 

saveerr = sys.stderr 
fsock = open('error.log', 'a') 
sys.stderr = fsock 

saveout = sys.stdout 
fsock1 = open('runtime.log', 'a') 
sys.stdout = fsock1 

cmd = 'robocopy \\\\aucb-net-01\\d$ \\\\nasaudc01\\remote_site_sync\\aucb-net-01 /E /MIR /W:2 /R:1' 
p = Popen(cmd, stdout=sys.stdout, stderror=sys.stderr, bufsize=1, universal_newlines=True) 
exit_code1 = p.wait() 

sehen @eryksuns Kommentare über robo Kopie und es Exit-Codes. http://ss64.com/nt/robocopy-exit.html

+0

Ich möchte sechs Robocopy in demselben Skript machen, wie kann ich das tun ..... wird das obige Skript für alle sechs Robocopy-Befehle funktionieren ... – Ajsh

+0

Ja, es wird funktionieren. Du kannst entweder die letzten 4 Zeilen 6-mal duplizieren oder ein Array von CMD-Werten erstellen und über sie hinweg iterieren – FloatingKiwi

+0

ja danke FloatingKiwi – Ajsh