Set prompt encoding to a sane value when sys.stdout.encoding is None

Fixes #8644
This commit is contained in:
James Cammarata 2014-08-18 22:04:25 -05:00
parent 379e31883c
commit c8494cdc39

View file

@ -25,6 +25,7 @@ import fnmatch
import tempfile import tempfile
import fcntl import fcntl
import constants import constants
import locale
from ansible.color import stringc from ansible.color import stringc
import logging import logging
@ -645,7 +646,13 @@ class PlaybookCallbacks(object):
msg = 'input for %s: ' % varname msg = 'input for %s: ' % varname
def prompt(prompt, private): def prompt(prompt, private):
if sys.stdout.encoding:
msg = prompt.encode(sys.stdout.encoding) msg = prompt.encode(sys.stdout.encoding)
else:
# when piping the output, or at other times when stdout
# may not be the standard file descriptor, the stdout
# encoding may not be set, so default to something sane
msg = prompt.encode(locale.getpreferredencoding())
if private: if private:
return getpass.getpass(msg) return getpass.getpass(msg)
return raw_input(msg) return raw_input(msg)