]> granicus.if.org Git - python/commitdiff
This is SF patch #405952, by Anthony Baxter:
authorGuido van Rossum <guido@python.org>
Thu, 22 Mar 2001 21:59:20 +0000 (21:59 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 22 Mar 2001 21:59:20 +0000 (21:59 +0000)
cmd.py uses raw_input(); eats SIGCLD:

  I discovered a rather nasty side effect of the standard cmd.py
  library today. If it's sitting inside raw_input(), any SIGCLDs that
  get sent to your application get silently eaten and ignored. I'm
  assuming that this is something that readline is thoughtfully doing
  for me.

  This patch adds an instance attr that allows the user to select to
  not use raw_input(), but instead use sys.stdin.readline()

[Changed slightly to catch EOFError only for raw_input().]

Lib/cmd.py

index dcf601f4f231fdf1c24ac6808da86440ba4bd227..10c11a22214cfa044e8fb8bdc949a65a43df4cf7 100644 (file)
@@ -35,7 +35,7 @@ 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"]
 
@@ -54,6 +54,7 @@ class Cmd:
     misc_header = "Miscellaneous help topics:"
     undoc_header = "Undocumented commands:"
     nohelp = "*** No help on %s"
+    use_rawinput = 1
 
     def __init__(self): pass
 
@@ -69,10 +70,18 @@ class Cmd:
                 line = self.cmdqueue[0]
                 del self.cmdqueue[0]
             else:
-                try:
-                    line = raw_input(self.prompt)
-                except EOFError:
-                    line = 'EOF'
+                if self.use_rawinput:
+                    try:
+                        line = raw_input(self.prompt)
+                    except EOFError:
+                        line = 'EOF'
+                else:
+                    sys.stdout.write(self.prompt)
+                    line = sys.stdin.readline()
+                    if not len(line):
+                        line = 'EOF'
+                    else:
+                        line = line[:-1] # chop \n
             line = self.precmd(line)
             stop = self.onecmd(line)
             stop = self.postcmd(stop, line)