只是一个简单的问题:
如何清除外壳中的屏幕?我见过类似的方式:
import os
os.system('cls')
这只是打开Windows cmd,清除屏幕并关闭,但是我希望清除shell窗口
(PS:我不知道这有什么帮助,但是我使用的是Python 3.3.2版)
谢谢:)
Answers:
对于macOS / OS X,您可以使用子进程模块并从外壳程序中调用“ cls”:
import subprocess as sp
sp.call('cls', shell=True)
为了防止在窗口顶部显示“ 0”,请用以下内容替换第二行:
tmp = sp.call('cls', shell=True)
对于Linux,您必须将cls
命令替换为clear
tmp = sp.call('clear', shell=True)
import subprocess as sp sp.call('clear',shell=True)
方法,但0
终端窗口顶部没有。
ctrl+L
sp.call('cls', shell=True);
import os
os.system('cls') # For Windows
os.system('clear') # For Linux/OS X
os.system('clear')
对于Mac OS X终端机(已确认可使用默认外壳程序,bash
也适用于csh
)。
您正在寻找的东西可以在curses模块中找到。
即
import curses # Get the module
stdscr = curses.initscr() # initialise it
stdscr.clear() # Clear the screen
要记住的重要一点是,在退出之前,您需要将终端重置为正常模式,这可以通过以下几行完成:
curses.nocbreak()
stdscr.keypad(0)
curses.echo()
curses.endwin()
如果不这样做,您会得到各种各样的奇怪行为。为了确保始终做到这一点,我建议使用atexit模块,例如:
import atexit
@atexit.register
def goodbye():
""" Reset terminal from curses mode on exit """
curses.nocbreak()
if stdscr:
stdscr.keypad(0)
curses.echo()
curses.endwin()
可能会做得很好。
stdscr = curses.initscr()
可以清除屏幕,stdscr.clear()
但无济于事。使用Python3.4,stdscr = curses.initscr()
可以清除屏幕,但剥夺了终端处理换行符的能力。当我反复按Enter键时,它显示以下内容:>>> >>> >>> >>>
依此类推。我仍然可以键入命令,但它们不会显示。同样,即使我使用exit()
Python ,此行为也会持续存在。避免使用!
curses
模块是否有兼容性问题(Windows,Mac,Linux)?我可以确认至少在两个不同的Mac终端上会发生此问题。该行为在BASH中持续存在,但在CSH中不存在。嗯....您认为我应该联系curses开发人员,shell开发人员,还是只问SO社区?再次感谢!
此功能可在任何操作系统(Unix,Linux,macOS和Windows)
Python 2和Python 3中使用
import platform # For getting the operating system name
import subprocess # For executing a shell command
def clear_screen():
"""
Clears the terminal screen.
"""
# Clear command as function of OS
command = "cls" if platform.system().lower()=="windows" else "clear"
# Action
return subprocess.call(command) == 0
在Windows中,命令为cls
;在类似Unix的系统中,命令为clear
。
platform.system()
返回平台名称。例如 'Darwin'
对于macOS。
subprocess.call()
执行系统调用。例如subprocess.call(['ls','-l'])
我正在使用只在幕后使用上述方法之一的类...我注意到它可以在Windows和Linux上运行...我喜欢使用它,因为键入clear()而不是system('clear' )或os.system('clear')
pip3 install clear-screen
from clear_screen import clear
然后当您想清除外壳程序时:
clear()
使用Windows 10和pyhton3.5,我已经测试了许多代码,没有什么比这更多的帮助了我:
首先定义一个简单的函数,此功能将打印50个换行符;(数字50将取决于您在屏幕上可以看到多少行,因此您可以更改此数字)
def cls(): print ("\n" * 50)
然后只要您想要或需要多次调用它
cls()
您可以使用Window或Linux Os
import os
os.system('cls')
os.system('clear')
您可以使用子流程模块
import subprocess as sp
x=sp.call('cls',shell=True)
您可以简单地使用(在Linux / macOS上),而不是导入所有的curses或掏空只是为了获得一个控制角色而已:
print(chr(27) + "[2J")
(来源:Python中的Clear终端)
下面是如何使你自己cls
或clear
命令,将工作没有显式调用任何功能!
我们将利用python控制台调用repr()
在屏幕上显示对象这一事实。如果您有自己的自定义python shell(-i
例如带有该选项),并且具有预加载脚本,则此功能特别有用。这是您需要的:
import os
class ScreenCleaner:
def __repr__(self):
os.system('cls') # This actually clears the screen
return '' # Because that's what repr() likes
cls = ScreenCleaner()
如果您使用的是Linux,请使用clear
代替cls
(在os
命令和变量名中都使用)!
现在,如果您只是编写文字cls
或clear
在控制台中-它将清除它!甚至没有cls()
或者clear()
-只是原始的变量。这是因为python将调用repr(cls)
以将其打印出来,从而触发我们的__repr__
函数。
让我们测试一下:
>>> df;sag
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'df' is not defined
>>> sglknas
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sglknas' is not defined
>>> lksnldn
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'lksnldn' is not defined
>>> cls
屏幕清晰!
为了澄清-上面的代码需要像这样在控制台中导入
from somefile import cls
或直接通过以下方式预加载:
python -i my_pre_loaded_classes.py
那是最好的方法:
>>>import os
>>>def cls(): os.system('cls')
>>>cls()