我无法正确描述此问题。我正在使用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 lucy
,add peter
。使用list
,您将获得一份已开始的工作清单。这些作业将开始将内容打印到CLI,但是它们将覆盖您的输入。尝试向list
发送垃圾邮件,您会注意到的,下面是屏幕截图:
显然,我不希望提示被覆盖。 CLI的最后一行应始终为(Cmd) some-user-input
。我愿意接受代码建议和不同的模块/库。