如何获得Python IDLE Shell中的终端高度(以行为单位?

问题描述 投票:1回答:2

我正在用Python 3.5创建一个Hangman游戏。我正在尝试创建一个清除控制台窗口的功能,可以通过在Windows上使用os.system(“ cls”)或在macOS,Linux等操作系统上使用os.system(“ clear”)来轻松实现此功能。但是,在IDLE Shell中运行脚本时,这些命令不起作用,因此,我尝试打印一系列换行符以隐藏所有先前的内容。

我正在努力寻找IDLE Shell高度的行。我已经尝试过os.get_terminal_size()[1],但这给出了错误“ ValueError:错误的文件描述符”。

这是我当前的代码:

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外壳尺寸?预先感谢。

python shell terminal python-idle
2个回答
0
投票

嗯,我认为那不是那么容易...如您所见,GUI应用程序的here的输出文件句柄可以为None。这就是使用os.get_terminal_size()无法获得空闲窗口大小的原因。但是,当您只使用普通的cmd终端时,就可以使用它。

除此之外,我将使用shutil.get_terminal_size()。根据this,这是高级功能,通常应使用。


0
投票

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

您可以做什么。

  1. 让用户在系统终端上运行程序(通常是默认值)。对于开发,请打印类似"\n**clear screen**\n"的信号,以向开发人员发送信号,通知您通常可以清除屏幕。
  2. 在IDLE分支中,print('\n'*N),其中N为75,通常应该足够。或者使用较小的数字,并通知用户您进行编程时假设窗口最多为N行。
  3. 了解足够的知识来运行您的程序。然后清除屏幕为text.delete('1.0', 'end-1c')
© www.soinside.com 2019 - 2024. All rights reserved.