如何在 Python IDLE Shell 中获取终端高度(以行为单位)?

How do I get the terminal height (in lines) in Python IDLE Shell?

我正在 Python 3.5 中创建 Hangman 游戏。我正在尝试创建一个函数来清除控制台 window,我可以通过在 Windows 或 os.system( "clear") 对于 macOS,Linux 等。 但是,当 运行 IDLE Shell 中的脚本时,这些命令不起作用,所以我试图打印一系列换行符以隐藏所有以前的内容。

我正在努力寻找 IDLE Shell 行的高度。我试过 os.get_terminal_size()[1] 但这给出了错误 "ValueError: bad file descriptor".

这是我当前的代码:

def clear():
"""Clears the console window.

Executes the 'cls' command when running on Windows, or 'clear' on
other platforms (e.g. Linux, macOS). IDLE shell cannot clear, so 
prints newlines instead.
"""
if "idlelib.run" in sys.modules:
    # If running in IDLE.
    print("\n" * os.get_terminal_size()[1])
elif platform.system() == "Windows":
    # If running in Windows terminal.
    os.system("cls")
else:
    # If running in other terminals (Linux, macOS)
    os.system("clear")

我将如何找到 IDLE Shell 行的大小? 提前致谢。

好吧,我认为这不是那么容易...如您所见here for GUI apps the file handle to the output can be None. That's the reason you can not get the size of the idle window using os.get_terminal_size()。但是,当你只是使用普通的cmd终端时,你可以直接使用它。

除此之外我会使用 shutil.get_terminal_size(). This is the high level function as per this 并且通常应该使用。

你的问题是双重的。 1. 20 年前,IDLE 是为开发程序而不是为用户 运行 设计的。 2. 在重要的地方,os 和 shutil 被设计为与实际的 text 终端一起使用,具有固定的行数和列数,或者与模仿此类的程序一起使用。它们不是为与 GUI 框架交互而设计的。有单独的模块。

你能做什么。

  1. 让用户运行在系统终端上使用您的程序(通常默认)。对于开发,打印类似 "\n**clear screen**\n" 的内容以向您(开发人员)表明屏幕通常会被清除。

  2. 在 IDLE 分支中,print('\n'*N),其中 N 为 75,这通常应该足够了。或者使用较小的数字并告知用户您的程序假定 window 在 most N 行。

  3. 学习足够的 tkinter 来 运行 你的程序。然后清屏就是text.delete('1.0', 'end-1c').

在 python 3.3+(仅限文本模式)中:

>>> import os

>>> os.get_terminal_size()
os.terminal_size(columns=124, lines=52)

还有:

>>> os.get_terminal_size().lines
52
>>> os.get_terminal_size()[1]
52

还行