如何在Python中的两个不同位置不断更新显示

时间:2014-11-28 18:30:13

标签: python multithreading python-multithreading

我知道如何在同一个地方打印一行,但我想从线程打印相同的地方。

现在我得到了:

OK 97035 

我想得到:

OK 97035 
OK 92035

第一行来自t1线程,第二行来自t2线程。谁知道怎么做?

这是示例代码。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import string, threading

def test():
    for i in range(0, 100000):
        print "\rOK "+str(i),

jczyd= ['1', '2']


while True:
        for i in jczyd:
                if i == '1':
                        #print i
                        t1 = threading.Thread(target=test, args = ())
                        t1.daemon = True
                        t1.start()
                elif i == '2':
                        #print i
                        t2 = threading.Thread(target=test, args = ())
                        t2.daemon = True
                        t2.start()
        t1.join()
        t2.join()

1 个答案:

答案 0 :(得分:1)

实际上,这比你想象的要复杂。

问题在于,普通ASCII中没有可用于同时更新两个单独文本行的字符。 \r只允许您删除一行。

如果要更新两行,则必须使用特定于平台的方法,如ANSI转义码,或使用curses以更一般的方式控制终端。

在大多数UNIX系统上,您可以使用以下代码执行此操作:

print '\x1b[%dH%s\x1b[K' % (thread_id, i)

将光标设置为thread_id行,打印i,然后删除该行的其余部分。