2014-12-04 95 views
4

通常,当raw_input要求您键入内容并按回车键时,反馈将打印在新行上。我该如何在提示行上打印?在这种情况下,CR可以工作吗?如何通过Python打印raw_input的行?

演示:

prompt = "Question: " 
answer = raw_input(prompt) 
print answer 
print("Correct!") 

键入答案和按回车键后模拟输出:

>> Question: my answer 
>> Correct! 

希望的输出:

>> Correct! 
+2

真棒的东西,如果在UNIX上,你可以尝试诅咒 - https://docs.python.org/2/howto/curses.html – 2014-12-04 21:13:28

+0

@BhargavRao我打算学[urwid]( http://urwid.org),但在那之前,我正在寻找一个简单的解决方案。 – octosquidopus 2014-12-04 21:15:48

+0

有3个选项比2更简单(我猜) – 2014-12-04 21:17:17

回答

3

使用blessings

from blessings import Terminal 
term = Terminal() 

raw_input("Question: ") 
print(term.move_up() + "Correct!" + term.clear_eol()) 

说真的,就是这样。

这里的东西票友:

input(term.red("Question: ") + term.bold) 
print(term.normal + term.move_up + term.green("Correct!") + term.clear_eol) 

这表明,经常打电话term.thing是可选的,因为他们同样采取行动的性质。这意味着你可以不喜欢

from blessings import Terminal 
term = Terminal() 

question = "{t.red}{}{t.normal}{t.bold}".format 
answer = "{t.normal}{t.move_up}{t.green}{}{t.normal}{t.clear_eol}".format 

input(question("Question: ", t=term)) 
print(answer("Correct!", t=term)) 
4

这是使用curses的溶液(末它等待x键结束程序):

#!/usr/bin/python                

import time 
import sys 
import curses 

def questionloop(stdscr): 
    stdscr.addstr("Question: ") 
    curses.echo() 
    while (1): 
     answer = stdscr.getstr() 
     curses.flushinp() 
     stdscr.clear() 
     stdscr.addstr("This is correct!") 
     doit = stdscr.getch() 
     if doit == ord('x'): 
     stdscr.addstr("Exiting!\n") 
     break 

curses.wrapper(questionloop) 

这是使用urwid一个例子:

import urwid 

def exit_on_q(key): 
    if key in ('q', 'Q'): 
     raise urwid.ExitMainLoop() 

class QuestionBox(urwid.Filler): 
    def keypress(self, size, key): 
     if key != 'enter': 
      return super(QuestionBox, self).keypress(size, key) 
     self.original_widget = urwid.Text(
      u"%s\n" % 
      edit.edit_text) 

edit = urwid.Edit(u"Question: \n") 
fill = QuestionBox(edit) 
loop = urwid.MainLoop(fill, unhandled_input=exit_on_q) 
loop.run() 

另一个(可能是最简洁的)解决方案,from Veedrac's answer,是使用blessings

from blessings import Terminal 
term = Terminal() 

question = "{t.red}{}{t.normal}{t.bold}".format 
answer = "{t.normal}{t.move_up}{t.green}{}{t.normal}{t.clear_eol}".format 

input(question("Question: ", t=term)) 
print(answer("Correct!", t=term))