B
Brano Zarnovican
Hi !
I'd like to init curses and still have working Python interactive
command line. I found that you can replace stdin/stdout/stderr
like this:
#!/usr/bin/python -i
import curses
import sys
import atexit
# this doesn't help, anyway
#del sys.modules['readline']
# global variable (curses window)
stdscr = None
class FakeStdIO(object):
def write(self, str):
global stdscr
stdscr.addstr(str)
stdscr.refresh()
def readline(self):
print "$ ",
return stdscr.getstr()
stdscr = curses.initscr()
atexit.register(curses.endwin)
curses.echo()
f = FakeStdIO()
sys.stdin = f
sys.stdout = f
sys.stderr = f
print 'Hello, curses !' # <-- this works
l = sys.stdin.readline() # <-- this also works fine
# <-- interactive Python prompt doesn't echo imput
It looks that '>>>' prompt is using the readline module, which
is not using sys.stdin at all.
Q: Can you prevent python interpreter to use readline module
(even when it is available), *without* recompiling python ?
I think it should be possible to write a module in C to access
Python internals. But can you do it "from python" ?
The other option is to make readline somehow work with curses.
This is however not what I intended.
Platform: Linux Mandrake, Python 2.3.5
Thanks,
BranoZ
I'd like to init curses and still have working Python interactive
command line. I found that you can replace stdin/stdout/stderr
like this:
#!/usr/bin/python -i
import curses
import sys
import atexit
# this doesn't help, anyway
#del sys.modules['readline']
# global variable (curses window)
stdscr = None
class FakeStdIO(object):
def write(self, str):
global stdscr
stdscr.addstr(str)
stdscr.refresh()
def readline(self):
print "$ ",
return stdscr.getstr()
stdscr = curses.initscr()
atexit.register(curses.endwin)
curses.echo()
f = FakeStdIO()
sys.stdin = f
sys.stdout = f
sys.stderr = f
print 'Hello, curses !' # <-- this works
l = sys.stdin.readline() # <-- this also works fine
# <-- interactive Python prompt doesn't echo imput
It looks that '>>>' prompt is using the readline module, which
is not using sys.stdin at all.
Q: Can you prevent python interpreter to use readline module
(even when it is available), *without* recompiling python ?
I think it should be possible to write a module in C to access
Python internals. But can you do it "from python" ?
The other option is to make readline somehow work with curses.
This is however not what I intended.
Platform: Linux Mandrake, Python 2.3.5
Thanks,
BranoZ