def __init__(self, file=None, stringio=False, encoding=None):
if file is None:
if stringio:
self.stringio = file = py.io.TextIO()
else:
from sys import stdout as file
elif py.builtin.callable(file) and not (
hasattr(file, "write") and hasattr(file, "flush")):
file = WriteFile(file, encoding=encoding)
if hasattr(file, "isatty") and file.isatty() and colorama:
file = colorama.AnsiToWin32(file).stream
self.encoding = encoding or getattr(file, 'encoding', "utf-8")
self._file = file
self.hasmarkup = should_do_markup(file)
self._lastlen = 0
self._chars_on_current_line = 0
python类isatty()的实例源码
def _flush_stdout():
# This is needed before using stderr, since it is never buffered
if not stdout.isatty():
stdout.flush()
def process_response(self, request, response):
from sys import stdout
if stdout.isatty():
for query in connection.queries:
print "\033[1;31m[%s]\033[0m \033[1m%s\033[0m" % (
query['time'], " ".join(query['sql'].split()))
return response
def check_prompt_root_pw():
if not cfg.opts.root_password:
if stdout.isatty():
# If have tty, prompt for pass
while True:
passwd = raw_input(c.CYAN("Enter root password for new VM or enter '") + c.BOLD("random") + c.CYAN("' or '") + c.BOLD("disabled") + c.CYAN("' or file path : "))
if passwd:
break
cfg.opts.root_password = ''
if passwd == 'random':
c.verbose("Password for root will be randomly generated")
elif passwd == 'disabled':
c.verbose("Password auth for root will be disabled")
elif os.path.isfile(os.path.expanduser(passwd)):
passwd = os.path.expanduser(passwd)
c.verbose("Password for root will be set by reading first line of file '{}'".format(passwd))
cfg.opts.root_password = 'file:'
else:
c.verbose("Password for root will be set to string '{}'".format(passwd))
cfg.opts.root_password = 'password:'
cfg.opts.root_password += passwd
save_passwd = raw_input(c.CYAN("Save password choice as default to '{}'? ".format(cfg.cfgfileUser)) + c.BOLD("[y]/n") + c.CYAN(" : "))
if save_passwd != 'n':
subprocess.call(['mkdir', '-p', os.path.dirname(os.path.expanduser(cfg.cfgfileUser))])
with open(os.path.expanduser(cfg.cfgfileUser), 'a+') as f:
f.write('# Added by {}:\nroot-password = {}\n'.format(cfg.prog, cfg.opts.root_password))
c.verbose("Wrote 'root-password = {}' to {}".format(cfg.opts.root_password, cfg.cfgfileUser))
else:
print(c.RED("No root password specified; aborting"))
print("Either run with stdin/stdout connected to tty to interactively enter password or\n"
" Use '--root-password password:PASSWORDSTRING' or\n"
" Use '--root-password file:PASSWORDFILE' or\n"
" Use '--root-password random'\n"
" Note that any of these can be specified in config file as well")
exit(1)
def check_prompt_vm_name():
if cfg.opts.vmname:
# If specified on cmdline, use it
pass
else:
# Otherwise generate a guess
_default_name = re.sub('[.]', '', cfg.opts.templateName)
if stdout.isatty():
# If have tty, prompt with default guess
cfg.opts.vmname = raw_input(c.CYAN("Enter VMNAME ") + c.BOLD("[{}]".format(_default_name)) + c.CYAN(" : "))
if not cfg.opts.vmname:
cfg.opts.vmname = _default_name
else:
# If no tty, use default guess
print(c.yellow("VMNAME not specified; using '{}'".format(_default_name)))
cfg.opts.vmname = _default_name
# Validate selected guest name
while True:
match = re.search(r'^{}$'.format(cfg.opts.vmname), cfg.guestList, re.M)
if match:
print(c.YELLOW("Already have a VM with the name '{}'".format(cfg.opts.vmname)))
print(c.BOLD("\nExisting VMs:"))
print(c.cyan(cfg.guestList.strip()))
if not stdout.isatty():
exit(1)
cfg.opts.vmname = raw_input(c.CYAN("Enter a unique VM name : "))
else:
break
def check_prompt_hostname():
if not cfg.opts.hostname:
_default_name = '{}.{}'.format(re.sub('[.]', '', cfg.opts.vmname), cfg.opts.dnsdomain)
if cfg.opts.hostname_prompt and stdout.isatty():
cfg.opts.hostname = raw_input(c.CYAN("Enter HOSTNAME ") + c.BOLD("[{}]".format(_default_name)) + c.CYAN(" or ") + c.BOLD("!") + c.CYAN(" to skip changing hostname : "))
if not cfg.opts.hostname:
cfg.opts.hostname = _default_name
else:
c.verbose("HOSTNAME not specified; using '{}'".format(_default_name))
cfg.opts.hostname = _default_name
def check_prompt_img_outfilepath():
cfg.opts.outFile = '{}/{}'.format(cfg.opts.img_dir, cfg.opts.vmname)
if cfg.opts.img_format in 'qcow2':
cfg.opts.outFile += '.qcow2'
# Ensure image file doesn't exist
while os.path.exists(cfg.opts.outFile):
print(c.YELLOW("Already have an image file with the name '{}' (in dir '{}')".format(os.path.basename(cfg.opts.outFile), cfg.opts.img_dir)))
if not stdout.isatty():
exit(1)
_x = raw_input(c.CYAN("\nEnter a unique image file name (not incl. path) : "))
cfg.opts.outFile = '{}/{}'.format(cfg.opts.img_dir, _x)
def prompt_for_template_and_exit():
if stdout.isatty():
print(c.cyan("Press Ctrl-c to quit or Enter to see available virt-builder templates"))
x = raw_input("")
print(get_virt_builder_list())
exit()
else:
exit(1)
def setup_color(color):
enable_out = (False if color == 'never' else
True if color == 'always' else
stdout.isatty())
Out_Style.enable(enable_out)
Out_Fore.enable(enable_out)
enable_err = (False if color == 'never' else
True if color == 'always' else
stderr.isatty())
Err_Style.enable(enable_err)
Err_Fore.enable(enable_err)
def should_do_markup(file):
if os.environ.get('PY_COLORS') == '1':
return True
if os.environ.get('PY_COLORS') == '0':
return False
return hasattr(file, 'isatty') and file.isatty() \
and os.environ.get('TERM') != 'dumb' \
and not (sys.platform.startswith('java') and os._name == 'nt')
def process_response(self, request, response):
from sys import stdout
if stdout.isatty():
for query in connection.queries:
print "\033[1;31m[%s]\033[0m \033[1m%s\033[0m" % (
query['time'], " ".join(query['sql'].split()))
return response
def ansi_print(text, esc, file=None, newline=True, flush=False):
if file is None:
file = sys.stderr
text = text.rstrip()
if esc and not isinstance(esc, tuple):
esc = (esc,)
if esc and sys.platform != "win32" and file.isatty():
text = (''.join(['\x1b[%sm' % cod for cod in esc]) +
text +
'\x1b[0m') # ANSI color code "reset"
if newline:
text += '\n'
if esc and win32_and_ctypes and file.isatty():
if 1 in esc:
bold = True
esc = tuple([x for x in esc if x != 1])
else:
bold = False
esctable = {() : FOREGROUND_WHITE, # normal
(31,): FOREGROUND_RED, # red
(32,): FOREGROUND_GREEN, # green
(33,): FOREGROUND_GREEN|FOREGROUND_RED, # yellow
(34,): FOREGROUND_BLUE, # blue
(35,): FOREGROUND_BLUE|FOREGROUND_RED, # purple
(36,): FOREGROUND_BLUE|FOREGROUND_GREEN, # cyan
(37,): FOREGROUND_WHITE, # white
(39,): FOREGROUND_WHITE, # reset
}
attr = esctable.get(esc, FOREGROUND_WHITE)
if bold:
attr |= FOREGROUND_INTENSITY
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
if file is sys.stderr:
handle = GetStdHandle(STD_ERROR_HANDLE)
else:
handle = GetStdHandle(STD_OUTPUT_HANDLE)
oldcolors = GetConsoleInfo(handle).wAttributes
attr |= (oldcolors & 0x0f0)
SetConsoleTextAttribute(handle, attr)
while len(text) > 32768:
file.write(text[:32768])
text = text[32768:]
if text:
file.write(text)
SetConsoleTextAttribute(handle, oldcolors)
else:
file.write(text)
if flush:
file.flush()