2012-05-02 24 views
8

SVNコミットを自動化するためにPythonを使用しています。SVNコマンドの出力をログファイルに書きたいと思います。私が持っているコードは、SVNを実行させることができますが、問題は成功したコミットでは、subprocess呼び出しは私のログの出力を返しません。subprocess.Popen()を使用すると、stderrとstdoutに出力がありません

私はSVNを手動で実行すると、コマンドの進行状況を示す出力が表示され、どのファイルがコミットされているかが表示されます。それが私のログファイルで欲しいものです。 SVNはそのデータをstdoutまたはstderrよりもバッファに出力していますか?ログのデータをどのように取得できますか?

cmd = "svn commit --non-interactive --no-auth-cache -m 'Automatic commit' ./" 
process = subprocess.Popen(cmd, 
          shell=True, 
          stdout=subprocess.PIPE, 
          stderr=subprocess.PIPE, 
          universal_newlines=True) 
result = process.wait() 

# Output 
out = process.stdout.read() 
err = process.stderr.read() 

私はこのコードを実行すると、コミットが成功し、outerr変数の両方が空です:

はここで私が使用しているコードです。

+0

をあなたがそれを行うには、ログイン資格情報を送信するにはどうすればよいですか?私は同じことをしようとしていると同じもののためにユーザー名とパスワードを送信する方法を把握できませんでした –

答えて

9

PIPEを使用しているときはwait()を使用しないでください。起因するデッドロックを回避するためにかなり.stdin.write、.stdout.read又は .stderr.readより)

警告
使用(通信:subprocess docsから)(

process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, 
      stderr=subprocess.PIPE, universal_newlines=True) 

out, err = process.communicate() 

を通信使用他のOSパイプのいずれかが、子プロセスをいっぱいにしてブロックします。

0

私の溶液中で働いています:

svn_commit_t = 'svn commit "%s" -m "ticket #%s automerge"' % (directory, tic) 

svn_co = subprocess.Popen(svn_commit_t, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE, universal_newlines=True) 

out, err = svn_co.communicate() 
関連する問題