python中多线程打印函数的意外缩进输出

时间:2014-09-25 02:16:45

标签: python multithreading printing output

我一直在尝试编写键盘监听器而不安装任何软件包。我想要的是创建一种只读取一个用户输入字符的非阻塞方式。所以我创建了除主要线程之外的另一个线程。这是我的代码:

import sys, os 
import thread
import time

try:
    from msvcrt import getch
except ImportError:
    def getch():
        import sys, tty, termios
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

char = None;

def key_listener():
    global char;
    while True:
        char = getch()
        # escape key to exit
        if ord(char) == 27:
            break
        #print char     #comment this line for test

thread.start_new_thread(key_listener, ())

while True:
    print("Whatever")
    time.sleep(1);

打印的字符串有点奇怪:

Yinans-MacBook-Pro:anaconda game Yinan$ python inputtest.py 
Whatever
    Whatever
            Whatever
                    Whatever
                            Whatever
                                    Whatever

看到那些缩进?我没想到会有那个。我一整个下午都在尝试解决它但失败了。有人知道如何解决这个问题吗?我将非常感激。 (顺便说一句,我使用的是macbook pro。)

1 个答案:

答案 0 :(得分:2)

将STDIN置于原始模式也会将STDOUT置于原始模式,因此正常\n不会扩展为CRLF。您需要在字符串末尾打印\r,以便将光标返回到第一列。