有没有办法清除Python的空闲窗口?

我知道有一个关于Python控制台的类似主题,但我不知道它们是否相同。我尝试了系统(“清除”),但它在这里不起作用。

如何清除Python的空闲窗口?

608067 次浏览

os.system('clear')在Linux上工作。如果您运行的是Windows,请尝试使用os.system('CLS')

您需要先导入操作系统,如下所示:

import os

在Python2.4+中执行命令的方法是使用子进程模块。您可以像使用os.system一样使用它。

import subprocess
subprocess.call("clear") # linux/mac
subprocess.call("cls", shell=True) # windows

如果您在Python控制台中执行此操作,则需要执行一些操作来隐藏返回值(对于os.systemsubprocess.call),例如将其分配给变量:

cls = subprocess.call("cls", shell=True)

“ CLS ”和“清除”是清除终端的命令(即DOS提示符或终端窗口)。从你的截图来看,你使用的是IDLE中的shell,它不会受到这些东西的影响。不幸的是,我不认为有办法在空闲时清除屏幕。你能做的最好的就是将屏幕向下滚动很多行,例如:

print ("\n" * 100)

虽然你可以把它放在一个函数中:

def cls(): print ("\n" * 100)

然后在需要时将其称为cls()

似乎没有办法清除空闲的“ shell ”缓冲区。

正如Mark.Ribau所说,似乎没有办法清除IDLE中的文本小部件。应该编辑EditorWindow.py模块,并在EditorWindow类中添加一个方法和一个菜单项,执行如下操作:

self.text.tag_remove("sel", "1.0", "end")
self.text.delete("1.0", "end")

也许还有更多我不知道的标签管理。

文件->新窗口

在新窗口中**

运行->Python Shell

这个方法的问题是它会清除你定义的所有东西,比如变量。

或者,您应该只使用命令提示符。

打开命令提示符

键入“ CD C:\python27 ”

键入“ python example.py ”,当它不处于交互模式时,您必须使用IDLE对其进行编辑。如果你在Python shell中,文件->新窗口。

请注意,example.py需要位于与C:\python27相同的目录中,或者位于安装了Python的任何目录中。

然后从这里开始,你只需按下键盘上的向上箭头键。您只需编辑example.py,使用Ctrl+S,然后返回到命令提示符,按向上箭头键,按Enter键。

如果命令提示符太拥挤,只需键入“ CLR ”

“ CLR ”命令仅适用于命令提示符,不适用于空闲。

用于清除外壳的扩展可以在第6143期中作为“特征请求”找到。此扩展包括在伊德莱克斯中。

>>> import os


>>>def cls():
...    os.system("clear")
...
>>>cls()

那是完美的。也未打印“ 0 ”。

没有必要编写自己的函数来做到这一点!Python有一个内置的清除函数。

在命令提示符处键入以下内容:

shell.clear()

如果使用IPython for Windows,则

cls()

在Windows上执行此操作的最佳方法是使用命令提示符“ cmd ”并访问Python目录。命令提示符可以在“开始”菜单>“运行”>cmd中找到

C:\>cd Python27
C:\Python27>python.exe
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>import os
>>>os.system('cls')  #This will clear the screen and return the value 0

您可以制作自动热键脚本。

将Ctrl-R设置为热键以清除shell:

^r::SendInput print '\n' * 50 {Enter}

只需安装AutoHotkey,将上述内容放在一个名为idle_clear.ahk的文件中,运行该文件,您的热键就会被激活。

这在Windows中对我有用:

print chr(12)

大多数的答案,在这里做清除DOS提示屏幕,清除命令,这不是问题。这里的其他答案是打印空行,以显示屏幕的清晰效果。

这个问题最简单的答案是

如果没有一些外部模块集成,就不可能清除Python空闲shell.如果你真的想得到一个空白的新shell,只需关闭以前的shell并再次运行它。

用这个

for num in range(1,100):
print("\n")

Ctrl+L在Ubuntu Linux上清除屏幕。

我喜欢用:

import os
clear = lambda : os.system('cls') # or clear for Linux


clear()

这些解决方案都不适合我在Windows7和IDLE中使用。最后使用PowerShell,在其中运行Python并退出以调用PowerShell中的“ CLS ”来清除窗口。

缺点:假设Python已经在PATH变量中。此外,这会清除Python变量(尽管重新启动shell也是如此)。

优点:保留您所做的任何窗口自定义(颜色、字体大小)。

如果没有任何外部库,这似乎是不可能的。

如果您使用的是Windows,并且不想每次都打开和关闭shell来清除它,那么另一种方法是使用Windows命令提示符。

  • 键入python,然后按Enter键将Windows命令提示符变为Python空闲(确保已安装Python)。

  • 键入quit(),然后按Enter键将其转回到Windows命令提示符。

  • 键入cls并按Enter键以清除命令提示符/Windows Shell.

我建议您对Python使用托尼·艾德。它的外壳有“清除外壳”选项,您还可以跟踪在单独列表中创建的变量。即使与现代IDE相比,它的调试也是非常好的。您还可以在Python文件中编写代码,并在同一位置访问shell.

而且它很轻!

适用于Mac OS X的“命令+L ”。

适用于Ubuntu的“控制+L

清除交互式会话的最后一行

似乎没有直接的方法来清除空闲控制台。

一种方法是使用exit()作为Python脚本(.py)中的最后一个命令。当我运行脚本时,它总是打开一个新的控制台,并在退出前提示。

优点:每次执行脚本时,控制台都会重新启动。 缺点:每次执行脚本时,控制台都会重新启动。

乌龟可以清除屏幕。

#=====================================
import turtle


wn = turtle.Screen()
wn.title("Clear the Screen")


t = turtle.Turtle()
t.color('red', 'yellow')
t.speed(0)


#=====================================


def star(x, y, length, angle):
t.penup()
t.goto(x, y)
t.pendown()
t.begin_fill()
while True:
t.forward(length)
t.left(angle)
if t.heading() == 0: #===============
break
t.end_fill()
#=====================================
#   (  x,    y,  length, angle)
star(-360,  0,    150,    45)
t.clear()
#=====================================

此答案适用于IDLE,而不适用于命令提示符,并且已使用Python 3.10.6进行了测试。

如果在代码运行时(在其完成之前)按Ctrl+Z,则先前的输出将被删除。如果您希望自动执行此操作,可以使用皮恩普特软件包。

pip install pynput

下面是一个示例代码(宏是不安全的,使用它的风险由您自行承担):

# License: MIT-0
import time
import pynput


class _Eraser:
keyboard = pynput.keyboard.Controller()
ctrl = pynput.keyboard.Key.ctrl
is_initialized = False


@classmethod
def erase(cls, n):
if not cls.is_initialized:
cls.is_initialized = True
n += 1
for _ in range(n):
with cls.keyboard.pressed(cls.ctrl):
cls.keyboard.press('z')
cls.keyboard.release('z')
time.sleep(0.1)


def erase(n=1):
_Eraser.erase(n)


print('test1\n', end='')
print('test2\n', end='')
erase()  # Erase 'test2\n'
print('test3')
print('test4')
erase()  # Erase '\n'
print('test5')
print('test6')
erase(2)  # Erase '\n' and then 'test6'
print('test7')

输出为:

test1
test3
test4test5
test7