<p>我需要设计一个脚本,该脚本使用终端的顶部作为输出,其中一些行在无限循环中每秒钟后打印一次,而底部部分继续接受用户输入,并在上面的部分(在定期输出中)打印它们</p>
<p>换句话说,我需要设计一种外壳</p>
<p>我尝试了以下幼稚的多线程方法:</p>
<pre><code>#!/usr/bin/python3
from math import acos
from threading import Thread
from random import choice
from time import sleep
from queue import Queue, Empty
commandQueue = Queue()
def outputThreadFunc():
outputs = ["So this is another output","Yet another output","Is this even working"] # Just for demo
while True:
print(choice(outputs))
try:
inp = commandQueue.get(timeout=0.1)
if inp == 'exit':
return
else:
print(inp)
except Empty:
pass
sleep(1)
def inputThreadFunc():
while True:
command = input("> ") # The shell
if command == 'exit':
return
commandQueue.put(command)
# MAIN CODE
outputThread = Thread(target=outputThreadFunc)
inputThread = Thread(target=inputThreadFunc)
outputThread.start()
inputThread.start()
outputThread.join()
inputThread.join()
print("Exit")
</code></pre>
<p>但很明显,正如预期的那样,当用户不断键入时,输出行与输入行合并</p>
<p>有什么想法吗</p>