1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
# NOT_RPYTHON (but maybe soon)
"""
Plain Python definition of the builtin I/O-related functions.
"""
import sys
def _write_prompt(stdout, prompt):
print(prompt, file=stdout, end='')
try:
flush = stdout.flush
except AttributeError:
pass
else:
flush()
def _is_std_tty(stdin, stdout):
try:
infileno, outfileno = stdin.fileno(), stdout.fileno()
except:
return False
return infileno == 0 and stdin.isatty() and outfileno == 1
def input(prompt=''):
"""input([prompt]) -> string
Read a string from standard input. The trailing newline is stripped.
If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
On Unix, GNU readline is used if enabled. The prompt string, if given,
is printed without a trailing newline before reading."""
try:
stdin = sys.stdin
except AttributeError:
raise RuntimeError("input: lost sys.stdin")
try:
stdout = sys.stdout
except AttributeError:
raise RuntimeError("input: lost sys.stdout")
try:
stderr = sys.stderr
except AttributeError:
raise RuntimeError("input: lost sys.stderr")
stderr.flush()
# hook for the readline module
if hasattr(sys, '__raw_input__') and _is_std_tty(stdin, stdout):
_write_prompt(stdout, '')
return sys.__raw_input__(str(prompt))
_write_prompt(stdout, prompt)
line = stdin.readline()
if not line: # inputting an empty line gives line == '\n'
raise EOFError
if line[-1] == '\n':
return line[:-1]
return line
def print_(*args, **kwargs):
r"""print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
"""
fp = kwargs.pop("file", None)
if fp is None:
fp = sys.stdout
if fp is None:
return
def write(data):
fp.write(str(data))
sep = kwargs.pop("sep", None)
if sep is not None:
if not isinstance(sep, str):
raise TypeError("sep must be None or a string")
end = kwargs.pop("end", None)
if end is not None:
if not isinstance(end, str):
raise TypeError("end must be None or a string")
flush = kwargs.pop('flush', None)
if kwargs:
raise TypeError("invalid keyword arguments to print()")
if sep is None:
sep = " "
if end is None:
end = "\n"
for i, arg in enumerate(args):
if i:
write(sep)
write(arg)
write(end)
if flush:
fp.flush()
|