bootstrap-vz/common/tools.py
2013-07-08 23:14:04 +02:00

47 lines
1.3 KiB
Python

def log_check_call(command):
status = log_call(command)
if status != 0:
from subprocess import CalledProcessError
msg = ('Command \'{command}\' returned non-zero exit status '
'{status}'.format(command=command, status=status))
raise CalledProcessError(msg)
def log_call(command):
import subprocess
import select
import logging
command_log = command[0].replace('/', '.')
log = logging.getLogger(__name__ + command_log)
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
reads = [process.stdout.fileno(), process.stderr.fileno()]
ret = select.select(reads, [], [])
for fd in ret[0]:
if fd == process.stdout.fileno():
line = process.stdout.readline()
if line != '':
log.debug(line.strip())
if fd == process.stderr.fileno():
line = process.stderr.readline()
if line != '':
log.error(line.strip())
if process.poll() is not None:
return process.returncode
def sed_i(file_path, pattern, subst):
from tempfile import mkstemp
from shutil import move
from os import close
temp_fd, temp_path = mkstemp()
with open(temp_path, 'w') as new_file:
with open(file_path) as old_file:
for line in old_file:
new_file.write(line.replace(pattern, subst))
close(temp_fd)
move(temp_path, file_path)