我正在开发一个程序(实际上是一个聊天机器人,如果你愿意,你可以在这里看到代码),它有一个无限循环一直在运行。
我使用 asyncio
作为代码的一部分,因此我最初尝试创建另一个接收输入并检查命令的子例程。然而,这似乎不起作用。
我想做的是能够发出程序命令而不会像使用 input()
那样中断执行。最好,它将具有一个>
字符和行,该字符和行位于屏幕底部,程序输出出现在其上方并允许输入。
这是否可以与asyncio
有关,或者我是否需要研究多线程我的程序或其他东西?
编辑:我的一个想法是,也许我可以使用一个ncurses
的GUI事物,它在底部有一个输入字段,所有机器人的输出都在输入字段上方。这可能吗?
您应该能够使用 asyncio,因为 StdIn 只是您可以选择的另一个流......
from threading import Thread
import shlex
def endless_job():
while True:
pass
job = Thread(target=endless_job)
job.start()
while True:
user_input = input('> ')
print(shlex.split(user_input))
shlex模块帮助您解析用户输入的命令行:)
如果需要将参数传递给 endless_job 函数,可以执行以下操作:
job = Thread(target=endless_job, args=(1,'a'), kwargs={'a': 1, 'b': 2})
其中args
和kwargs
分别代表位置参数和命名参数。