Cmd模块:异步作业打印正在覆盖提示输入

时间:2019-07-14 12:13:01

标签: python asynchronous cmd printing

我无法正确描述此问题。我正在使用cmd模块编写一个CLI,以启动异步作业。当这些作业使用print打印某些输出时,该打印将覆盖当前的提示/用户输入。

下面是描述该问题的代码段:

import time
from concurrent.futures import ThreadPoolExecutor
import cmd


class MyCmd(cmd.Cmd):
    POOL = ThreadPoolExecutor()
    workers = {}

def work(self, name):
    for n in range(1, 11):
        print(name + ': I am on number ' + str(n) + ' of 10')
        time.sleep(3)

def do_add(self, line):
    self.workers.update({line: self.POOL.submit(self.work, line)})

def do_list(self, line):
    print(str(list(self.workers.keys())))

def do_EOF(self, line):
    return True


if __name__ == '__main__':
    MyCmd().cmdloop()

激活CLI后,可以使用add some_string添加作业,例如add lucyadd peter。使用list,您将获得一份已开始的工作清单。这些作业将开始将内容打印到CLI,但是它们将覆盖您的输入。尝试向list发送垃圾邮件,您会注意到的,下面是屏幕截图:

Screenshot of CLI output

显然,我不希望提示被覆盖。 CLI的最后一行应始终为(Cmd) some-user-input。我愿意接受代码建议和不同的模块/库。

0 个答案:

没有答案