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

Python Cmd模块:异步作业打印正在覆盖提示输入,python,asynchronous,cmd,printing,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, n

我很难正确地描述这个问题。我正在使用启动异步作业的
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后,可以使用
添加一些字符串来添加作业,例如
添加lucy
添加peter
。使用
list
可以获得已启动作业的列表。这些作业将开始向CLI打印内容,但它们将覆盖您的输入。尝试垃圾邮件
列表
,您会注意到,下面是一个屏幕截图:


很明显,我不希望提示被覆盖。CLI的最后一行应该始终是
(Cmd)一些用户输入。我愿意接受代码建议和不同的模块/库。

如果我使用行
self.stdout.write(self.prompt)
self.stdout.flush()
打印后,我可以强制CLI的最后一行始终为(Cmd)。然而,如果作业实际上是在课外完成的,这将变得很混乱。另外,在生成一个新的(Cmd)行后重用用户输入也很好。如果我在打印后使用
self.stdout.write(self.prompt)
self.stdout.flush()
,我可以强制CLI的最后一行始终是(Cmd)。然而,如果作业实际上是在课外完成的,这将变得很混乱。另外,在生成一个新的(Cmd)行之后重用用户输入也很好。