【问题标题】:Get python program to end by pressing anykey and not enter [duplicate]让python程序通过按任意键结束而不是输入[重复]
【发布时间】:2013-10-28 22:31:19
【问题描述】:

我怎样才能让我的 Python 程序通过按任意键而不按 Enter 来结束。因此,如果用户键入“c”,程序应该会自动结束而不按回车。

到目前为止我的代码:

print("Hi everyone! This is just a quick sample code I made")
print("Press anykey to end the program.")

【问题讨论】:

  • 有什么理由不用ctrl+c吗?
  • 使用无限循环,例如while True:,然后当您的用户输入所需的退出键时将break 退出循环。由于您尚未发布任何代码;除此之外很难帮助您。
  • @Burhan Khalid,我刚刚提供了一个示例代码。希望对您有所帮助。
  • 这是你的整个程序吗?
  • 当你启动一个程序时,让我们说“右键单击 -> 在终端中打开” 某些操作系统会在程序完成后立即关闭终端。这意味着实际终端将在他的情况下关闭。添加“获取”将阻止程序完成并关闭终端。正如他所说他想在不按“回车”的情况下处理它,我假设他已经尝试过类似sys.stdin.read(1) 的东西,它只会在换行符上接收输入。好吧,任何类型的输入都会在换行符上触发。

标签: python


【解决方案1】:

通常,人们会使用input('>> ')(或raw_input('>> ')与Python3)来获取用户命令。但是,这确实要求用户在输入数据后提交数据。因此,对于您的示例,用户将键入 c 然后按 Enter 键。

如果您使用的是 Windows,那么我认为您所追求的可能接近 this answer。这个例子导入了一个库msvcrt,您可以使用它来检测键盘敲击(使用msvcrt.kbhit())。因此,用户键入 c 并且您的代码可以响应该击键,而无需等待 Enter 键。当然,在执行所需的代码(即退出应用程序)之前,您必须处理键(即检查按钮确实是 c)。


编辑:此答案假定您有一个 while() 循环做事和/或等待用户输入。如:

import msvcrt

print("Hi everyone! This is just a quick sample code I made")
print("Press anykey to end the program.")

while(True):
    # Do stuff here.
    if msvcrt.kbhit():
        # The user entered a key. Check to see if it was a "c".
        if (msvcrt.getch() == "c"):
            break
        elif (msvcrt.getch() == <some other character>):
            # Do some other thing.

当然要结束任何键盘敲击的程序,只需去掉检查键是否为“c”的部分。

【讨论】:

  • 问题解决了!非常感谢! :) 这很有帮助!
  • msvcrt.getch() 阻塞,有什么方法可以不阻塞获取key值?
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2021-01-18
  • 2022-01-22
相关资源
最近更新 更多