From ce96f69d69a6020c780145c89a17a8391b63624b Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Fri, 17 Mar 2006 06:49:51 +0000 Subject: [PATCH] Get rid of a bunch more raw_input references --- Demo/pdist/cmptree.py | 5 ++++ Demo/pdist/mac.py | 11 ++++++--- Demo/pdist/rcvs.py | 7 +++--- Demo/pdist/sumtree.py | 5 +++- Demo/scripts/unbirthday.py | 5 ++++ Demo/sockets/ftp.py | 8 ++++++- Demo/sockets/gopher.py | 26 +++++++++++--------- Demo/tkinter/guido/wish.py | 5 +++- Doc/lib/libcmd.tex | 10 -------- Doc/lib/libcode.tex | 4 ++-- Doc/lib/libcrypt.tex | 6 +++++ Doc/lib/libexcs.tex | 7 +----- Doc/lib/libfuncs.tex | 35 --------------------------- Doc/lib/libsmtplib.tex | 6 +++++ Doc/lib/libsys.tex | 7 ++---- Doc/lib/libtelnetlib.tex | 5 ++++ Doc/lib/libtermios.tex | 6 +++++ Doc/ref/ref8.tex | 5 +--- Doc/tools/keywords.py | 6 +++++ Doc/tut/tut.tex | 33 +++++++++++++++++++++---- Lib/cmd.py | 10 ++++---- Lib/code.py | 10 ++++---- Lib/distutils/command/register.py | 5 ++++ Lib/getpass.py | 3 +-- Lib/idlelib/PyShell.py | 2 +- Lib/pdb.py | 5 ++++ Lib/plat-mac/aetools.py | 5 ++++ Lib/pydoc.py | 5 ++++ Lib/rlcompleter.py | 6 ----- Lib/site.py | 4 +++- Lib/test/test_exceptions.py | 4 ++-- Lib/urllib.py | 7 +++--- Mac/Demo/resources/copyres.py | 6 +++++ Mac/Demo/sound/morselib.py | 40 +++++++++++++++++++++---------- Misc/Vim/python.vim | 10 ++++---- Misc/cheatsheet | 10 -------- Misc/python-mode.el | 8 +++---- Tools/compiler/regrtest.py | 5 ++++ Tools/scripts/ftpmirror.py | 5 ++++ Tools/scripts/treesync.py | 5 ++++ Tools/scripts/xxci.py | 5 ++++ Tools/webchecker/wcmac.py | 4 +++- 42 files changed, 222 insertions(+), 144 deletions(-) diff --git a/Demo/pdist/cmptree.py b/Demo/pdist/cmptree.py index f6c611f6969..fa06f5f4674 100755 --- a/Demo/pdist/cmptree.py +++ b/Demo/pdist/cmptree.py @@ -6,6 +6,11 @@ import FSProxy import time import os +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def main(): pwd = os.getcwd() s = raw_input("chdir [%s] " % pwd) diff --git a/Demo/pdist/mac.py b/Demo/pdist/mac.py index 107113c18a8..61cff09b9fe 100755 --- a/Demo/pdist/mac.py +++ b/Demo/pdist/mac.py @@ -1,14 +1,18 @@ import sys -import string import rcvs +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def main(): while 1: try: line = raw_input('$ ') except EOFError: break - words = string.split(line) + words = line.split() if not words: continue if words[0] != 'rcvs': @@ -16,4 +20,5 @@ def main(): sys.argv = words rcvs.main() -main() +if __name__ == '__main__': + main() diff --git a/Demo/pdist/rcvs.py b/Demo/pdist/rcvs.py index 8b8bae63b93..ab1fd872eec 100755 --- a/Demo/pdist/rcvs.py +++ b/Demo/pdist/rcvs.py @@ -35,7 +35,6 @@ from cvslib import CVS, File import md5 import os -import string import sys from cmdfw import CommandFrameWork @@ -269,13 +268,13 @@ class RCVS(CVS): def mailinfo(self, files, message = ""): towhom = "sjoerd@cwi.nl, jack@cwi.nl" # XXX - mailtext = MAILFORM % (towhom, string.join(files), - string.join(files), message) + mailtext = MAILFORM % (towhom, ' '.join(files), + ' '.join(files), message) print '-'*70 print mailtext print '-'*70 ok = raw_input("OK to mail to %s? " % towhom) - if string.lower(string.strip(ok)) in ('y', 'ye', 'yes'): + if ok.lower().strip() in ('y', 'ye', 'yes'): p = os.popen(SENDMAIL, "w") p.write(mailtext) sts = p.close() diff --git a/Demo/pdist/sumtree.py b/Demo/pdist/sumtree.py index 9291a56b99a..68224df27a1 100755 --- a/Demo/pdist/sumtree.py +++ b/Demo/pdist/sumtree.py @@ -1,4 +1,5 @@ import time +import sys import FSProxy def main(): @@ -9,7 +10,9 @@ def main(): proxy._close() t2 = time.time() print t2-t1, "seconds" - raw_input("[Return to exit] ") + sys.stdout.write("[Return to exit] ") + sys.stdout.flush() + sys.stdin.readline() def sumtree(proxy): print "PWD =", proxy.pwd() diff --git a/Demo/scripts/unbirthday.py b/Demo/scripts/unbirthday.py index 2d0b8e5f403..94ad448588e 100755 --- a/Demo/scripts/unbirthday.py +++ b/Demo/scripts/unbirthday.py @@ -9,6 +9,11 @@ import sys import time import calendar +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def main(): # Note that the range checks below also check for bad types, # e.g. 3.14 or (). However syntactically invalid replies diff --git a/Demo/sockets/ftp.py b/Demo/sockets/ftp.py index 6e9282a5921..eed45befc40 100755 --- a/Demo/sockets/ftp.py +++ b/Demo/sockets/ftp.py @@ -130,6 +130,11 @@ def getdata(r): sys.stdout.write(data) print '(end of data connection)' +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + # Get a command from the user. # def getcommand(): @@ -143,4 +148,5 @@ def getcommand(): # Call the main program. # -main() +if __name__ == '__main__': + main() diff --git a/Demo/sockets/gopher.py b/Demo/sockets/gopher.py index 34bcdf0cc21..2488c8129a1 100755 --- a/Demo/sockets/gopher.py +++ b/Demo/sockets/gopher.py @@ -4,7 +4,6 @@ # # Usage: gopher [ [selector] host [port] ] -import string import sys import os import socket @@ -42,7 +41,7 @@ def open_socket(host, port): if not port: port = DEF_PORT elif type(port) == type(''): - port = string.atoi(port) + port = int(port) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) return s @@ -73,7 +72,7 @@ def get_menu(selector, host, port): print '(Empty line from server)' continue typechar = line[0] - parts = string.splitfields(line[1:], TAB) + parts = line[1:].split(TAB) if len(parts) < 4: print '(Bad line from server: %r)' % (line,) continue @@ -160,7 +159,7 @@ def browse_menu(selector, host, port): for i in range(len(list)): item = list[i] typechar, description = item[0], item[1] - print string.rjust(repr(i+1), 3) + ':', description, + print repr(i+1).rjust(3) + ':', description, if typename.has_key(typechar): print typename[typechar] else: @@ -175,8 +174,8 @@ def browse_menu(selector, host, port): if not str: return try: - choice = string.atoi(str) - except string.atoi_error: + choice = int(str) + except ValueError: print 'Choice must be a number; try again:' continue if not 0 < choice <= len(list): @@ -218,6 +217,11 @@ def browse_textfile(selector, host, port): print 'IOError:', msg x.close() +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + # Browse a search index def browse_search(selector, host, port): while 1: @@ -230,7 +234,7 @@ def browse_search(selector, host, port): except EOFError: print break - query = string.strip(query) + query = query.strip() if not query: break if '\t' in query: @@ -300,11 +304,11 @@ def open_savefile(): except EOFError: print return None - savefile = string.strip(savefile) + savefile = savefile.strip() if not savefile: return None if savefile[0] == '|': - cmd = string.strip(savefile[1:]) + cmd = savefile[1:].strip() try: p = os.popen(cmd, 'w') except IOError, msg: @@ -331,10 +335,10 @@ def test(): browser(sys.argv[1], sys.argv[2], sys.argv[3]) elif sys.argv[2:]: try: - port = string.atoi(sys.argv[2]) + port = int(sys.argv[2]) selector = '' host = sys.argv[1] - except string.atoi_error: + except ValueError: selector = sys.argv[1] host = sys.argv[2] port = '' diff --git a/Demo/tkinter/guido/wish.py b/Demo/tkinter/guido/wish.py index 0a61ad88d86..35e012c7dff 100755 --- a/Demo/tkinter/guido/wish.py +++ b/Demo/tkinter/guido/wish.py @@ -2,6 +2,7 @@ import _tkinter import os +import sys tk = _tkinter.create(os.environ['DISPLAY'], 'wish', 'Tk', 1) tk.call('update') @@ -12,7 +13,9 @@ while 1: if cmd: prompt = '' else: prompt = '% ' try: - line = raw_input(prompt) + sys.stdout.write(prompt) + sys.stdout.flush() + line = sys.stdin.readline() except EOFError: break cmd = cmd + (line + '\n') diff --git a/Doc/lib/libcmd.tex b/Doc/lib/libcmd.tex index 661eb9e45ca..9fe8123808f 100644 --- a/Doc/lib/libcmd.tex +++ b/Doc/lib/libcmd.tex @@ -186,13 +186,3 @@ The character used to draw separator lines under the help-message headers. If empty, no ruler line is drawn. It defaults to \character{=}. \end{memberdesc} - -\begin{memberdesc}{use_rawinput} -A flag, defaulting to true. If true, \method{cmdloop()} uses -\function{raw_input()} to display a prompt and read the next command; -if false, \method{sys.stdout.write()} and -\method{sys.stdin.readline()} are used. (This means that by -importing \refmodule{readline}, on systems that support it, the -interpreter will automatically support \program{Emacs}-like line editing -and command-history keystrokes.) -\end{memberdesc} diff --git a/Doc/lib/libcode.tex b/Doc/lib/libcode.tex index dc4c717ad8a..628a1eb7359 100644 --- a/Doc/lib/libcode.tex +++ b/Doc/lib/libcode.tex @@ -167,7 +167,7 @@ Remove any unhandled source text from the input buffer. \begin{methoddesc}{raw_input}{\optional{prompt}} Write a prompt and read a line. The returned line does not include the trailing newline. When the user enters the \EOF{} key sequence, -\exception{EOFError} is raised. The base implementation uses the -built-in function \function{raw_input()}; a subclass may replace this +\exception{EOFError} is raised. The base implementation reads from +\code{sys.stdin}; a subclass may replace this with a different implementation. \end{methoddesc} diff --git a/Doc/lib/libcrypt.tex b/Doc/lib/libcrypt.tex index b6a14635b56..55e716354a2 100644 --- a/Doc/lib/libcrypt.tex +++ b/Doc/lib/libcrypt.tex @@ -41,6 +41,12 @@ A simple example illustrating typical use: \begin{verbatim} import crypt, getpass, pwd +def raw_input(prompt): + import sys + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def login(): username = raw_input('Python login:') cryptedpasswd = pwd.getpwnam(username)[1] diff --git a/Doc/lib/libexcs.tex b/Doc/lib/libexcs.tex index f52ff0a952b..85058a414ed 100644 --- a/Doc/lib/libexcs.tex +++ b/Doc/lib/libexcs.tex @@ -153,9 +153,7 @@ Raised when an \keyword{assert} statement fails. \begin{excdesc}{EOFError} % XXXJH xrefs here - Raised when one of the built-in functions (\function{input()} or - \function{raw_input()}) hits an end-of-file condition (\EOF) without - reading any data. + Raised when attempting to read beyond the end of a file. % XXXJH xrefs here (N.B.: the \method{read()} and \method{readline()} methods of file objects return an empty string when they hit \EOF.) @@ -213,9 +211,6 @@ Raised when an \keyword{assert} statement fails. \kbd{Control-C} or \kbd{Delete}). During execution, a check for interrupts is made regularly. % XXX(hylton) xrefs here - Interrupts typed when a built-in function \function{input()} or - \function{raw_input()} is waiting for input also raise this - exception. The exception inherits from \exception{BaseException} so as to not be accidentally caught by code that catches \exception{Exception} and thus prevent the interpreter from exiting. diff --git a/Doc/lib/libfuncs.tex b/Doc/lib/libfuncs.tex index 9b6bfe9d7b4..c75c172a60f 100644 --- a/Doc/lib/libfuncs.tex +++ b/Doc/lib/libfuncs.tex @@ -551,23 +551,6 @@ class C: note: this is the address of the object.) \end{funcdesc} -\begin{funcdesc}{input}{\optional{prompt}} - Equivalent to \code{eval(raw_input(\var{prompt}))}. - \warning{This function is not safe from user errors! It - expects a valid Python expression as input; if the input is not - syntactically valid, a \exception{SyntaxError} will be raised. - Other exceptions may be raised if there is an error during - evaluation. (On the other hand, sometimes this is exactly what you - need when writing a quick script for expert use.)} - - If the \refmodule{readline} module was loaded, then - \function{input()} will use it to provide elaborate line editing and - history features. - - Consider using the \function{raw_input()} function for general input - from users. -\end{funcdesc} - \begin{funcdesc}{int}{\optional{x\optional{, radix}}} Convert a string or number to a plain integer. If the argument is a string, it must contain a possibly signed decimal number @@ -811,24 +794,6 @@ class C(object): \end{verbatim} \end{funcdesc} -\begin{funcdesc}{raw_input}{\optional{prompt}} - If the \var{prompt} argument is present, it is written to standard output - without a trailing newline. The function then reads a line from input, - converts it to a string (stripping a trailing newline), and returns that. - When \EOF{} is read, \exception{EOFError} is raised. Example: - -\begin{verbatim} ->>> s = raw_input('--> ') ---> Monty Python's Flying Circus ->>> s -"Monty Python's Flying Circus" -\end{verbatim} - - If the \refmodule{readline} module was loaded, then - \function{raw_input()} will use it to provide elaborate - line editing and history features. -\end{funcdesc} - \begin{funcdesc}{reduce}{function, sequence\optional{, initializer}} Apply \var{function} of two arguments cumulatively to the items of \var{sequence}, from left to right, so as to reduce the sequence to diff --git a/Doc/lib/libsmtplib.tex b/Doc/lib/libsmtplib.tex index 2f87bc483b1..ddf17649c78 100644 --- a/Doc/lib/libsmtplib.tex +++ b/Doc/lib/libsmtplib.tex @@ -267,6 +267,12 @@ processing of the \rfc{822} headers. In particular, the `To' and \begin{verbatim} import smtplib +def raw_input(prompt): + import sys + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def prompt(prompt): return raw_input(prompt).strip() diff --git a/Doc/lib/libsys.tex b/Doc/lib/libsys.tex index ea8950a847f..1a57da4b37e 100644 --- a/Doc/lib/libsys.tex +++ b/Doc/lib/libsys.tex @@ -511,11 +511,8 @@ else: \dataline{stderr} File objects corresponding to the interpreter's standard input, output and error streams. \code{stdin} is used for all interpreter - input except for scripts but including calls to - \function{input()}\bifuncindex{input} and - \function{raw_input()}\bifuncindex{raw_input}. \code{stdout} is - used for the output of \keyword{print} and expression statements and - for the prompts of \function{input()} and \function{raw_input()}. + input except for scripts. \code{stdout} is + used for the output of \keyword{print} and expression statements. The interpreter's own prompts and (almost all of) its error messages go to \code{stderr}. \code{stdout} and \code{stderr} needn't be built-in file objects: any object is acceptable as long as it has a diff --git a/Doc/lib/libtelnetlib.tex b/Doc/lib/libtelnetlib.tex index c7a4226dccd..b8dfeee2e00 100644 --- a/Doc/lib/libtelnetlib.tex +++ b/Doc/lib/libtelnetlib.tex @@ -196,6 +196,11 @@ import getpass import sys import telnetlib +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + HOST = "localhost" user = raw_input("Enter your remote account: ") password = getpass.getpass() diff --git a/Doc/lib/libtermios.tex b/Doc/lib/libtermios.tex index ef99cf9eded..64f3438a0ff 100644 --- a/Doc/lib/libtermios.tex +++ b/Doc/lib/libtermios.tex @@ -91,6 +91,12 @@ and a \keyword{try} ... \keyword{finally} statement to ensure that the old tty attributes are restored exactly no matter what happens: \begin{verbatim} +def raw_input(prompt): + import sys + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def getpass(prompt = "Password: "): import termios, sys fd = sys.stdin.fileno() diff --git a/Doc/ref/ref8.tex b/Doc/ref/ref8.tex index d10c87f5bea..801ab582c01 100644 --- a/Doc/ref/ref8.tex +++ b/Doc/ref/ref8.tex @@ -103,10 +103,7 @@ The input line read by \function{input()} must have the following form: \end{productionlist} Note: to read `raw' input line without interpretation, you can use the -built-in function \function{raw_input()} or the \method{readline()} method -of file objects. +the \method{readline()} method of file objects, including \code{sys.stdin}. \obindex{file} \index{input!raw} -\index{raw input} -\bifuncindex{raw_input} \withsubitem{(file method)}{\ttindex{readline()}} diff --git a/Doc/tools/keywords.py b/Doc/tools/keywords.py index 9f32056db21..33440214780 100644 --- a/Doc/tools/keywords.py +++ b/Doc/tools/keywords.py @@ -2,6 +2,12 @@ # This Python program sorts and reformats the table of keywords in ref2.tex +def raw_input(prompt): + import sys + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + l = [] try: while 1: diff --git a/Doc/tut/tut.tex b/Doc/tut/tut.tex index efbc08d2dc4..054985bbeb6 100644 --- a/Doc/tut/tut.tex +++ b/Doc/tut/tut.tex @@ -231,7 +231,7 @@ full name on the command line. Note that there is a difference between \samp{python file} and \samp{python >> def raw_input(prompt): +... import sys +... sys.stdout.write(prompt) +... sys.stdout.flush() +... return sys.stdin.readline() +... >>> x = int(raw_input("Please enter an integer: ")) >>> if x < 0: ... x = 0 @@ -1453,6 +1459,12 @@ arguments. This creates a function that can be called with fewer arguments than it is defined to allow. For example: \begin{verbatim} +def raw_input(prompt): + import sys + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = raw_input(prompt) @@ -2711,15 +2723,15 @@ standard module \module{__builtin__}\refbimodindex{__builtin__}: 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__', - '__name__', 'abs', 'apply', 'basestring', 'bool', 'buffer', + '__name__', 'abs', 'basestring', 'bool', 'buffer', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', - 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', + 'id', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'quit', 'range', - 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', + 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip'] \end{verbatim} @@ -3412,6 +3424,12 @@ supports); note that a user-generated interruption is signalled by raising the \exception{KeyboardInterrupt} exception. \begin{verbatim} +>>> def raw_input(prompt): +... import sys +... sys.stdout.write(prompt) +... sys.stdout.flush() +... return sys.stdin.readline() +... >>> while True: ... try: ... x = int(raw_input("Please enter a number: ")) @@ -4983,7 +5001,12 @@ renaming utility for a photo browser may elect to use percent signs for placeholders such as the current date, image sequence number, or file format: \begin{verbatim} ->>> import time, os.path +>>> import time, os.path, sys +>>> def raw_input(prompt): +... sys.stdout.write(prompt) +... sys.stdout.flush() +... return sys.stdin.readline() +... >>> photofiles = ['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg'] >>> class BatchRename(Template): ... delimiter = '%' diff --git a/Lib/cmd.py b/Lib/cmd.py index 3f82b487103..23dc5b2fb26 100644 --- a/Lib/cmd.py +++ b/Lib/cmd.py @@ -40,18 +40,20 @@ The data members `self.doc_header', `self.misc_header', and `self.undoc_header' set the headers used for the help function's listings of documented functions, miscellaneous topics, and undocumented functions respectively. - -These interpreters use raw_input; thus, if the readline module is loaded, -they automatically support Emacs-like command history and editing features. """ -import string +import string, sys __all__ = ["Cmd"] PROMPT = '(Cmd) ' IDENTCHARS = string.ascii_letters + string.digits + '_' +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + class Cmd: """A simple framework for writing line-oriented command interpreters. diff --git a/Lib/code.py b/Lib/code.py index 6bdc658add0..b67009b93b7 100644 --- a/Lib/code.py +++ b/Lib/code.py @@ -269,12 +269,14 @@ class InteractiveConsole(InteractiveInterpreter): The returned line does not include the trailing newline. When the user enters the EOF key sequence, EOFError is raised. - The base implementation uses the built-in function - raw_input(); a subclass may replace this with a different - implementation. + The base implementation uses sys.stdin.readline(); a subclass + may replace this with a different implementation. """ - return raw_input(prompt) + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def interact(banner=None, readfunc=None, local=None): diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py index dec9aa2bf21..f8912621c8d 100644 --- a/Lib/distutils/command/register.py +++ b/Lib/distutils/command/register.py @@ -13,6 +13,11 @@ import StringIO, ConfigParser from distutils.core import Command from distutils.errors import * +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + class register(Command): description = ("register the distribution with the Python package index") diff --git a/Lib/getpass.py b/Lib/getpass.py index e96491f90bf..a30d3a15416 100644 --- a/Lib/getpass.py +++ b/Lib/getpass.py @@ -69,8 +69,7 @@ def default_getpass(prompt='Password: '): def _raw_input(prompt=""): - # A raw_input() replacement that doesn't save the string in the - # GNU readline history. + # This doesn't save the string in the GNU readline history. prompt = str(prompt) if prompt: sys.stdout.write(prompt) diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index f81091bc4b6..b6abe408cec 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -1122,7 +1122,7 @@ class PyShell(OutputWindow): self.text.tag_add("stdin", "iomark", "end-1c") self.text.update_idletasks() if self.reading: - self.top.quit() # Break out of recursive mainloop() in raw_input() + self.top.quit() # Break out of recursive mainloop() else: self.runit() return "break" diff --git a/Lib/pdb.py b/Lib/pdb.py index b00f68b79d5..1aa2eaee272 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -22,6 +22,11 @@ _saferepr = _repr.repr __all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace", "post_mortem", "help"] +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def find_function(funcname, filename): cre = re.compile(r'def\s+%s\s*[(]' % funcname) try: diff --git a/Lib/plat-mac/aetools.py b/Lib/plat-mac/aetools.py index 79f3978316d..861dd2fd1b1 100644 --- a/Lib/plat-mac/aetools.py +++ b/Lib/plat-mac/aetools.py @@ -342,6 +342,11 @@ _application_file._elemdict = { # XXXX Should test more, really... def test(): + def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + target = AE.AECreateDesc('sign', 'quil') ae = AE.AECreateAppleEvent('aevt', 'oapp', target, -1, 0) print unpackevent(ae) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index ee45643b432..b6afc7f9ad5 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1505,6 +1505,11 @@ def writedocs(dir, pkgpath='', done=None): done[modname] = 1 writedoc(modname) +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + class Helper: keywords = { 'and': 'BOOLEAN', diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py index 1d291670f14..6eb77f97e13 100644 --- a/Lib/rlcompleter.py +++ b/Lib/rlcompleter.py @@ -28,12 +28,6 @@ application (or the user) to enable this feature, I consider this an acceptable risk. More complicated expressions (e.g. function calls or indexing operations) are *not* evaluated. -- GNU readline is also used by the built-in functions input() and -raw_input(), and thus these also benefit/suffer from the completer -features. Clearly an interactive application can benefit by -specifying its own completer function and using raw_input() for all -its input. - - When the original stdin is not a tty device, GNU readline is never used, and this module (and the readline module) are silently inactive. diff --git a/Lib/site.py b/Lib/site.py index 6818e8531f9..5e7ff7bc122 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -299,7 +299,9 @@ class _Printer(object): lineno += self.MAXLINES key = None while key is None: - key = raw_input(prompt) + sys.stdout.write(prompt) + sys.stdout.flush() + key = sys.stdin.readline() if key not in ('', 'q'): key = None if key == 'q': diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index fdef876879b..65f78766730 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -44,8 +44,8 @@ fp = open(TESTFN, 'r') savestdin = sys.stdin try: try: - sys.stdin = fp - x = raw_input() + import marshal + marshal.loads('') except EOFError: pass finally: diff --git a/Lib/urllib.py b/Lib/urllib.py index aeca3f10073..136f42ea20e 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -768,10 +768,11 @@ class FancyURLopener(URLopener): def prompt_user_passwd(self, host, realm): """Override this in a GUI environment!""" - import getpass + import getpass, sys try: - user = raw_input("Enter username for %s at %s: " % (realm, - host)) + sys.stdout.write("Enter username for %s at %s: " % (realm, host)) + sys.stdout.flush() + user = sys.stdin.readline() passwd = getpass.getpass("Enter password for %s in %s at %s: " % (user, realm, host)) return user, passwd diff --git a/Mac/Demo/resources/copyres.py b/Mac/Demo/resources/copyres.py index 528ff167946..cb1fa8e2869 100644 --- a/Mac/Demo/resources/copyres.py +++ b/Mac/Demo/resources/copyres.py @@ -6,6 +6,12 @@ READ = 1 WRITE = 2 smAllScripts = -3 +def raw_input(prompt): + import sys + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def copyres(src, dst): """Copy resource from src file to dst file.""" diff --git a/Mac/Demo/sound/morselib.py b/Mac/Demo/sound/morselib.py index 98e259059a7..3c7493fc411 100644 --- a/Mac/Demo/sound/morselib.py +++ b/Mac/Demo/sound/morselib.py @@ -61,11 +61,10 @@ morsetab = { } def morsecode(s): - from string import lower m = '' for c in s: - c = lower(c) - if morsetab.has_key(c): + c = c.lower() + if c in morsetab: c = morsetab[c] + ' ' else: c = '? ' @@ -107,9 +106,12 @@ class BaseMorse: def sendmorse(self, s): for c in s: - if c == '.': self.dot() - elif c == '-': self.dah() - else: self.pdah() + if c == '.': + self.dot() + elif c == '-': + self.dah() + else: + self.pdah() self.pdot() def sendascii(self, s): @@ -122,8 +124,9 @@ class BaseMorse: import Audio_mac class MyAudio(Audio_mac.Play_Audio_mac): def _callback(self, *args): - if hasattr(self, 'usercallback'): self.usercallback() - apply(Audio_mac.Play_Audio_mac._callback, (self,) + args) + if hasattr(self, 'usercallback'): + self.usercallback() + Audio_mac.Play_Audio_mac._callback(self, args) class MacMorse(BaseMorse): @@ -169,12 +172,21 @@ class MacMorse(BaseMorse): def usercallback(self): if self.morsequeue: c, self.morsequeue = self.morsequeue[0], self.morsequeue[1:] - if c == '.': self.dot() - elif c == '-': self.dah() - else: self.pdah() + if c == '.': + self.dot() + elif c == '-': + self.dah() + else: + self.pdah() self.pdot() +def raw_input(prompt): + import sys + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def test(): m = MacMorse() while 1: @@ -183,6 +195,8 @@ def test(): except (EOFError, KeyboardInterrupt): break m.send(line) - while m.morsequeue: pass + while m.morsequeue: + pass -test() +if __name__ == '__main__': + test() diff --git a/Misc/Vim/python.vim b/Misc/Vim/python.vim index 0d5e6d05e25..a31fa308a2b 100644 --- a/Misc/Vim/python.vim +++ b/Misc/Vim/python.vim @@ -63,16 +63,16 @@ endif if exists("python_highlight_builtins") syn keyword pythonBuiltin unichr all set abs vars int __import__ unicode - syn keyword pythonBuiltin enumerate reduce coerce intern exit issubclass - syn keyword pythonBuiltin divmod file Ellipsis apply isinstance open any + syn keyword pythonBuiltin enumerate reduce exit issubclass + syn keyword pythonBuiltin divmod file Ellipsis isinstance open any syn keyword pythonBuiltin locals help filter basestring slice copyright min - syn keyword pythonBuiltin super sum tuple hex execfile long id xrange chr + syn keyword pythonBuiltin super sum tuple hex execfile long id chr syn keyword pythonBuiltin complex bool zip pow dict True oct NotImplemented syn keyword pythonBuiltin map None float hash getattr buffer max reversed syn keyword pythonBuiltin object quit len repr callable credits setattr syn keyword pythonBuiltin eval frozenset sorted ord __debug__ hasattr - syn keyword pythonBuiltin delattr False input license classmethod type - syn keyword pythonBuiltin raw_input list iter compile reload range globals + syn keyword pythonBuiltin delattr False license classmethod type + syn keyword pythonBuiltin list iter reload range globals syn keyword pythonBuiltin staticmethod str property round dir cmp endif diff --git a/Misc/cheatsheet b/Misc/cheatsheet index d50ed2e6568..b8de4281fb8 100644 --- a/Misc/cheatsheet +++ b/Misc/cheatsheet @@ -925,8 +925,6 @@ __import__(name[, Imports module within the given context (see lib ref for globals[, locals[, more details) fromlist]]]) abs(x) Return the absolute value of number x. -apply(f, args[, Calls func/method f with arguments args and optional -keywords]) keywords. bool(x) Returns True when the argument x is true and False otherwise. buffer(obj) Creates a buffer reference to an object. callable(x) Returns True if x callable, else False. @@ -934,10 +932,6 @@ chr(i) Returns one-character string whose ASCII code isinteger i classmethod(f) Converts a function f, into a method with the class as the first argument. Useful for creating alternative constructors. cmp(x,y) Returns negative, 0, positive if x <, ==, > to y -coerce(x,y) Returns a tuple of the two numeric arguments converted to a - common type. - Compiles string into a code object.filename is used in - error message, can be any string. It isusually the file compile(string, from which the code was read, or eg. ''if not read filename, kind) from file.kind can be 'eval' if string is a single stmt, or 'single' which prints the output of expression statements @@ -971,8 +965,6 @@ hash(object) Returns the hash value of the object (if it has one) help(f) Display documentation on object f. hex(x) Converts a number x to a hexadecimal string. id(object) Returns a unique 'identity' integer for an object. -input([prompt]) Prints prompt if given. Reads input and evaluates it. - Converts a number or a string to a plain integer. Optional int(x[, base]) base paramenter specifies base from which to convert string values. intern(aString) Enters aString in the table of "interned strings" @@ -1013,8 +1005,6 @@ property() Created a property with access controlled by functions. range(start [,end Returns list of ints from >= start and < end.With 1 arg, [, step]]) list from 0..arg-1With 2 args, list from start..end-1With 3 args, list from start up to end by step -raw_input([prompt]) Prints prompt if given, then reads string from stdinput (no - trailing \n). See also input(). reduce(f, list [, Applies the binary function f to the items oflist so as to init]) reduce the list to a single value.If init given, it is "prepended" to list. diff --git a/Misc/python-mode.el b/Misc/python-mode.el index 202541cd9fd..1392c84d62f 100644 --- a/Misc/python-mode.el +++ b/Misc/python-mode.el @@ -378,18 +378,18 @@ support for features needed by `python-mode'.") "ZeroDivisionError" "__debug__" "__import__" "__name__" "abs" "apply" "basestring" "bool" "buffer" "callable" "chr" "classmethod" - "cmp" "coerce" "compile" "complex" "copyright" + "cmp" "compile" "complex" "copyright" "delattr" "dict" "dir" "divmod" "enumerate" "eval" "execfile" "exit" "file" "filter" "float" "getattr" "globals" "hasattr" - "hash" "hex" "id" "input" "int" "intern" + "hash" "hex" "id" "int" "intern" "isinstance" "issubclass" "iter" "len" "license" "list" "locals" "long" "map" "max" "min" "object" "oct" "open" "ord" "pow" "property" "range" - "raw_input" "reduce" "reload" "repr" "round" + "reduce" "reload" "repr" "round" "setattr" "slice" "staticmethod" "str" "sum" "super" "tuple" "type" "unichr" "unicode" "vars" - "xrange" "zip") + "zip") "\\|")) ) (list diff --git a/Tools/compiler/regrtest.py b/Tools/compiler/regrtest.py index 50d06e71f3b..4244d62c04e 100644 --- a/Tools/compiler/regrtest.py +++ b/Tools/compiler/regrtest.py @@ -67,6 +67,11 @@ def run_regrtest(lib_dir): def cleanup(dir): os.system("rm -rf %s" % dir) +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def main(): lib_dir = copy_library() compile_files(lib_dir) diff --git a/Tools/scripts/ftpmirror.py b/Tools/scripts/ftpmirror.py index 0f918b88458..caade165518 100755 --- a/Tools/scripts/ftpmirror.py +++ b/Tools/scripts/ftpmirror.py @@ -352,6 +352,11 @@ class LoggingFile: def close(self): self.outfp.write('\n') +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + # Ask permission to download a file. def askabout(filetype, filename, pwd): prompt = 'Retrieve %s %s from %s ? [ny] ' % (filetype, filename, pwd) diff --git a/Tools/scripts/treesync.py b/Tools/scripts/treesync.py index ab9324baeee..4fb1798c603 100755 --- a/Tools/scripts/treesync.py +++ b/Tools/scripts/treesync.py @@ -187,6 +187,11 @@ def copy(src, dst, rmode="rb", wmode="wb", answer='ask'): f.close() g.close() +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def okay(prompt, answer='ask'): answer = answer.strip().lower() if not answer or answer[0] not in 'ny': diff --git a/Tools/scripts/xxci.py b/Tools/scripts/xxci.py index c6a7d087209..1e77c87e2f8 100755 --- a/Tools/scripts/xxci.py +++ b/Tools/scripts/xxci.py @@ -105,6 +105,11 @@ def showdiffs(file): cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}' sts = os.system(cmd) +def raw_input(prompt): + sys.stdout.write(prompt) + sys.stdout.flush() + return sys.stdin.readline() + def askyesno(prompt): s = raw_input(prompt) return s in ['y', 'yes'] diff --git a/Tools/webchecker/wcmac.py b/Tools/webchecker/wcmac.py index 9c8a199611c..9edcd5de1a1 100644 --- a/Tools/webchecker/wcmac.py +++ b/Tools/webchecker/wcmac.py @@ -4,4 +4,6 @@ webchecker.MAXPAGE = 50000 webchecker.verbose = 2 sys.argv.append('-x') webchecker.main() -raw_input("\nCR to exit: ") +sys.stdout.write("\nCR to exit: ") +sys.stdout.flush() +sys.stdin.readline()