2016-08-19 8 views
0

stdoutとstderrを2つの異なるログファイルに出力したいと思います。 私はこのコードを試しましたが、エラーログに出力するだけですが、出力はruntime.logファイルにリダイレクトされません。windows python stdoutとstderrを2つの異なるファイルに変換する

コードはウィンドウで実行されており、ほとんどがrobocopyがコードで実行されています。

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

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

sys.stdout領域が機能していません。このコードの修正内容をお知らせください。

は、ここに私のコード全体私のポストを読み取るためのみんなに

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) 

のおかげです。

+1

どのようにRobocopyを起動していますか? (そして、なぜこのタグのついた 'PowerShell'ですか?) – TessellatingHeckler

+0

これはあなたの* stdoutをruntime.logに転用するはずです。もしあなたがrobocopyを起動しているのであれば、stdoutをファイルに迂回させたいでしょう。 robocopyを起動するために使用しているコードを投稿してください – FloatingKiwi

答えて

3

私のコメントに記載されているように、あなたのコードは stdoutをファイルに転用する必要があります。 Robocopyをのstdoutが

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() 

このリンクに示すように、あまりにもちょうどあなたのstdoutに各ラインをエコーそこに行くために取得するにはロボコピーに関する@eryksunsのコメントを参照し、それが終了コードです。 http://ss64.com/nt/robocopy-exit.html

+0

同じスクリプトで6つのrobocopyを実行したいのですが、どうすればいいですか?上記のスクリプトは6つのrobocopyコマンドすべてで動作します...... – Ajsh

+0

はい、うまくいくでしょう。最後の4行を6回複製するか、cmd値の配列を作成して繰り返します。 – FloatingKiwi

+0

ありがとうございますFloatingKiwi – Ajsh

関連する問題