获取用户输入而不中断程序执行

时间:2015-06-14 01:03:56

标签: python python-3.x input python-multithreading python-asyncio

我正在开发一个程序(实际上是一个聊天机器人,如果你愿意,你可以看到代码here),它始终在运行无限循环。

我使用asyncio作为代码的一部分,所以我最初尝试创建另一个接收输入并检查命令的子例程。但是,它看起来并没有起作用。

我想要做的是能够在不中断执行的情况下发出程序命令,就像使用input()一样。优选地,它将具有>字符和线,其保持在屏幕的底部,其中程序输出出现在其上方并允许​​输入。

这可能与asyncio有关吗?​​或者我是否需要研究多线程程序或其他内容?

编辑:有人认为我可能会使用ncurses图形用户界面,其底部有一个输入字段,所有机器人的输出都在条目上方领域。这有可能吗?

2 个答案:

答案 0 :(得分:1)

您应该可以使用asyncio,因为StdIn只是您可以选择的另一个流...

答案 1 :(得分:-1)

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})

其中argskwargs分别代表位置和命名参数。