mirror of
https://github.com/python/cpython.git
synced 2025-09-07 01:11:26 +00:00
Modified most (but not yet all) I/O to always go through sys.stdout or
sys.stderr or sys.stdin, and to work with any object as long as it has a write() (respectively readline()) methods. Some functions that took a FILE* argument now take an object* argument.
This commit is contained in:
parent
3a40ae4ef3
commit
3165fe6a56
8 changed files with 217 additions and 76 deletions
|
@ -308,28 +308,19 @@ builtin_hex(self, v)
|
|||
return (*nb->nb_hex)(v);
|
||||
}
|
||||
|
||||
static object *builtin_raw_input PROTO((object *, object *));
|
||||
|
||||
static object *
|
||||
builtin_input(self, v)
|
||||
object *self;
|
||||
object *v;
|
||||
{
|
||||
FILE *in = sysgetfile("stdin", stdin);
|
||||
FILE *out = sysgetfile("stdout", stdout);
|
||||
int c;
|
||||
object *m, *d;
|
||||
flushline();
|
||||
if (v != NULL) {
|
||||
if (printobject(v, out, PRINT_RAW) != 0)
|
||||
return NULL;
|
||||
}
|
||||
m = add_module("__main__");
|
||||
d = getmoduledict(m);
|
||||
BGN_SAVE
|
||||
while ((c = getc(in)) != EOF && (c == ' ' || c == '\t'))
|
||||
;
|
||||
ungetc(c, in);
|
||||
END_SAVE
|
||||
return run_file(in, "<stdin>", expr_input, d, d);
|
||||
object *line = builtin_raw_input(self, v);
|
||||
if (line == NULL)
|
||||
return line;
|
||||
v = exec_eval(line, eval_input);
|
||||
DECREF(line);
|
||||
return v;
|
||||
}
|
||||
|
||||
static object *
|
||||
|
@ -578,10 +569,14 @@ builtin_raw_input(self, v)
|
|||
object *self;
|
||||
object *v;
|
||||
{
|
||||
FILE *out = sysgetfile("stdout", stdout);
|
||||
object *f = sysget("stdout");
|
||||
if (f == NULL) {
|
||||
err_setstr(RuntimeError, "lost sys.stdout");
|
||||
return NULL;
|
||||
}
|
||||
flushline();
|
||||
if (v != NULL) {
|
||||
if (printobject(v, out, PRINT_RAW) != 0)
|
||||
if (writeobject(v, f, PRINT_RAW) != 0)
|
||||
return NULL;
|
||||
}
|
||||
return filegetline(sysget("stdin"), -1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue