CMD_PREFIX = 'cmd : '
-_MY_ENCODING = locale.getdefaultlocale()[1]
def _get_stdout():
"""Get stdout value for ``subprocess`` calls.
stdout = []
stderr = []
+ my_encoding = locale.getdefaultlocale()[1]
if msg:
logger.info(msg)
logger.debug('%s%s', CMD_PREFIX, ' '.join(cmd))
try:
- proc = subprocess.Popen(
- cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=0)
+ proc = subprocess.Popen(map(os.path.expanduser, cmd),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, bufsize=0)
while True:
reads = [proc.stdout.fileno(), proc.stderr.fileno()]
if file_d == proc.stdout.fileno():
line = proc.stdout.readline()
if settings.getValue('VERBOSITY') == 'debug':
- sys.stdout.write(line.decode(_MY_ENCODING))
+ sys.stdout.write(line.decode(my_encoding))
stdout.append(line)
if file_d == proc.stderr.fileno():
line = proc.stderr.readline()
- sys.stderr.write(line.decode(_MY_ENCODING))
+ sys.stderr.write(line.decode(my_encoding))
stderr.append(line)
if proc.poll() is not None:
ex = subprocess.CalledProcessError(proc.returncode, cmd, stderr)
handle_error(ex)
- return ('\n'.join(sout.decode(_MY_ENCODING).strip() for sout in stdout),
- ('\n'.join(sout.decode(_MY_ENCODING).strip() for sout in stderr)))
+ return ('\n'.join(sout.decode(my_encoding).strip() for sout in stdout),
+ ('\n'.join(sout.decode(my_encoding).strip() for sout in stderr)))
def run_background_task(cmd, logger, msg):
"""Run task in background and log when started.
logger.info(msg)
logger.debug('%s%s', CMD_PREFIX, ' '.join(cmd))
- proc = subprocess.Popen(cmd, stdout=_get_stdout(), bufsize=0)
+ proc = subprocess.Popen(map(os.path.expanduser, cmd), stdout=_get_stdout(), bufsize=0)
return proc.pid