util.system: avoid buffering of subprocess output when it is piped

util.system() copies subprocess' output through pipe if output file is not
stdout.  Because a file iterator has internal buffering, output won't be
flushed until enough data is available.  Therefore, it could easily miss
important messages such as "waiting for lock".
This commit is contained in:
Yuya Nishihara 2014-08-30 17:38:14 +02:00
parent a290d1f800
commit e7ee70da05

View File

@ -649,7 +649,10 @@ def system(cmd, environ={}, cwd=None, onerr=None, errprefix=None, out=None):
proc = subprocess.Popen(cmd, shell=True, close_fds=closefds,
env=env, cwd=cwd, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
for line in proc.stdout:
while True:
line = proc.stdout.readline()
if not line:
break
out.write(line)
proc.wait()
rc = proc.returncode