Làm thế nào để xóa bảng điều khiển phiên dịch?


325

Giống như hầu hết các nhà phát triển Python, tôi thường mở một cửa sổ giao diện điều khiển với trình thông dịch Python đang chạy để kiểm tra các lệnh, dir()công cụ help() stuff, v.v.

Giống như bất kỳ bàn điều khiển nào, sau một thời gian tồn đọng có thể nhìn thấy của các lệnh và bản in trong quá khứ sẽ bị lộn xộn và đôi khi gây nhầm lẫn khi chạy lại cùng một lệnh nhiều lần. Tôi đang tự hỏi nếu và làm thế nào để xóa bảng điều khiển trình thông dịch Python.

Tôi đã nghe nói về việc thực hiện một cuộc gọi hệ thống và gọi clsWindows hoặc clearLinux, nhưng tôi hy vọng có điều gì đó tôi có thể ra lệnh cho chính phiên dịch viên thực hiện.

Lưu ý: Tôi đang chạy trên Windows, vì vậy Ctrl+Lkhông hoạt động.


Giải pháp IPython tại đây: stackoverflow.com/questions/6892191/ từ
onewhaleid

Tôi ngạc nhiên không ai nhắc đến nó. Nhưng khi bạn đang sử dụng Ipython shell, bạn có thể thực hiện Ctrl + L ngay cả trong windows
user93

Câu trả lời:


442

Như bạn đã đề cập, bạn có thể thực hiện một cuộc gọi hệ thống:

Cho cửa sổ

>>> import os
>>> clear = lambda: os.system('cls')
>>> clear()

Đối với Linux, lambda trở thành

>>> clear = lambda: os.system('clear')

1
Câu trả lời này gần nhất với "tinh thần" của những gì tôi đã yêu cầu, cảm ơn.
Soviut

1
+1, câu trả lời hay. Có cách nào để tiêu thụ giá trị trả về để nó không hiển thị không? Tôi nhận được '0' sau khi chạy rõ ràng.
Technomalogical

15
Xác định nó trong một hàm thông thường thay vì lambda không nên hiển thị '0' vì giá trị trả về sẽ là Không có.
Akbar ibrahim

46
Có gì sai khi sử dụng def? Tại sao sử dụng a lambdakhi a defrõ ràng hơn?
S.Lott

17
@Akbaribrahim vì Không ai sẽ không được in hãy thử điều này:clear = lambda: os.system('cls') or None
enpenax

193

ở đây một cái gì đó tiện dụng đó là một nền tảng chéo hơn một chút

import os

def cls():
    os.system('cls' if os.name=='nt' else 'clear')

# now, to clear the screen
cls()

Cách tuyệt vời để làm mọi thứ, Kết hợp điều này với gợi ý lambda ở trên để tiết kiệm một hàng mã, tiện dụng như địa ngục! Cảm ơn bạn! :)
Torxed

import os os.system('cls')
Đỗ Như Vy

1
Biến môi trường HẠN không được đặt.
Jonathan

87

Chà, đây là một bản hack nhanh:

>>> clear = "\n" * 100
>>> print clear
>>> ...do some other stuff...
>>> print clear

Hoặc để lưu một số thao tác gõ, hãy đặt tệp này vào đường dẫn tìm kiếm python của bạn:

# wiper.py
class Wipe(object):
    def __repr__(self):
        return '\n'*1000

wipe = Wipe()

Sau đó, bạn có thể làm điều này từ trình thông dịch tất cả những gì bạn thích :)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe

12
Haha, thật là buồn cười Không chính xác những gì tôi đang tìm kiếm, nhưng cố gắng tốt đẹp.
Soviut

4
@Triptych: c = "\ n" * 100 hữu ích, +1 cho nó. Một nhận xét nhỏ nó xóa và đưa xuống dưới cùng của vỏ, tôi thích bắt đầu từ đầu vỏ.
pythonbeginer

1
Hoặc, nếu trình giả lập thiết bị đầu cuối của bạn diễn giải ANSI, tốt hơn hết là:"\x1B[H\x1B[J"
Alba Mendez

8
Mặc dù mọi người cười, in rất nhiều dòng mới là chính xác những gì các quy trình bên ngoài clearclslàm. Đây cách để làm điều đó. (tất nhiên chỉ là một bản in hoặc một chức năng với lệnh gọi in, không ám chỉ chuỗi "rõ ràng", tất nhiên)
jsbueno

4
@jsbueno không phải vậy. Có lẽ trên windows (mặc dù tôi nghi ngờ nó, nó có API để xóa giao diện điều khiển). Trên tất cả các hệ thống khác, clearxuất ra một lệnh xóa màn hình. Không có bộ đệm cuộn. Trên hệ thống của tôi, nó xuất ra chuỗi điều khiển này : \33[3J\33[H\33[2J. Đó là : [erase scrollback] [reset cursor position] [erase screen]. Có [erase scrollback]thể được bỏ qua bằng cách sử dụng clear -x.
quang phổ

28

Mặc dù đây là một câu hỏi cũ hơn, tôi nghĩ rằng tôi đã đóng góp một cái gì đó tóm tắt những gì tôi nghĩ là tốt nhất trong các câu trả lời khác và thêm một nếp nhăn của riêng tôi bằng cách đề nghị bạn đặt các lệnh này vào một tệp và đặt PYTHONSTARTUP của bạn biến môi trường để chỉ vào nó. Vì hiện tại tôi đang sử dụng Windows, nó hơi thiên vị theo cách đó, nhưng có thể dễ dàng bị nghiêng theo một hướng khác.

Dưới đây là một số bài viết tôi thấy mô tả cách đặt biến môi trường trên Windows:
    Khi nào nên sử dụng sys.path.append và khi sửa đổi% PYTHONPATH% là đủ
    Cách quản lý biến môi trường trong Windows XP
    Cấu hình hệ thống và môi trường người dùng Biến
    cách sử dụng hệ thống toàn cầu Biến môi trường trong Windows

BTW, không đặt dấu ngoặc kép quanh đường dẫn đến tệp ngay cả khi nó có khoảng trắng trong đó.

Dù sao, đây là mã của tôi để đưa vào (hoặc thêm vào tập lệnh khởi động Python hiện có của bạn:

# ==== pythonstartup.py ====

# add something to clear the screen
class cls(object):
    def __repr__(self):
        import os
        os.system('cls' if os.name == 'nt' else 'clear')
        return ''

cls = cls()

# ==== end pythonstartup.py ====

BTW, bạn cũng có thể sử dụng thủ thuật của @ Triptych__repr__ để thay đổi exit()thành exit(và ditto cho bí danh của nó quit):

class exit(object):
    exit = exit # original object
    def __repr__(self):
        self.exit() # call original
        return ''

quit = exit = exit()

Cuối cùng, đây là một cái gì đó khác thay đổi lời nhắc trình thông dịch chính từ >>>sang cwd + >>>:

class Prompt:
    def __str__(self):
        import os
        return '%s >>> ' % os.getcwd()

import sys
sys.ps1 = Prompt()
del sys
del Prompt

Đây có lẽ là câu trả lời tốt nhất - sự kết hợp của các kỹ thuật từ các câu trả lời khác. PYTHONSTARTUP + repr + os.system ('cls'). Rất đẹp.
Triptych

@Triptych: Một tác dụng phụ thú vị của việc sử dụng __repr__và / hoặc __str__theo cách này là nếu bạn gõ >>> vars()vào bảng điều khiển trình thông dịch, nó sẽ thực thi tất cả các lệnh được xác định như vậy. Trên hệ thống của tôi, ví dụ, nó xóa màn hình và sau đó thoát khỏi bàn điều khiển. Mất một lúc tôi mới biết chuyện quái gì đang diễn ra ....
martineau

hấp dẫn. Tôi thấy vấn đề này cũng áp dụng cho locals()globals(). Một trình trang trí đơn giản xung quanh các chức năng này sẽ xóa tên và gán lại tên đó sau khi gọi hàm là một giải pháp khả thi ...
Triptych

@Triptych: Ý tưởng trang trí dường như không hoạt động, ít nhất là với những nỗ lực của riêng tôi. Đến với một sự thay thế khả thi đang chứng tỏ là khó khăn đáng ngạc nhiên.
martineau

Tôi có một giải pháp ứng viên chỉ đơn giản là kết quả của các cuộc gọi vars () globalals () và localals
Triptych

28

Bạn có nhiều cách thực hiện trên Windows:

1. Sử dụng phím tắt:

Press CTRL + L

2. Sử dụng phương thức gọi hệ thống:

import os
cls = lambda: os.system('cls')
cls()

3. Sử dụng dòng in mới 100 lần:

cls = lambda: print('\n'*100)
cls()

5
Tất cả những cách này đều khá ... naff. clssẽ chỉ hoạt động trên windows và làm cho chương trình của bạn khó trở thành đa nền tảng, in 100 newlineschỉ là ... eww? Và một phím tắt không được sử dụng trong chương trình.
Lu-ca

22

Cách nhanh nhất và dễ nhất mà không có nghi ngờ là Ctrl+ L.

Điều này cũng tương tự đối với OS X trên thiết bị đầu cuối.


3
Tôi đã thử giải pháp này bằng chữ "L" viết hoa hoặc viết thường bằng phím ctrl trên windows 8.1. Nó không làm việc cho tôi. Tôi chỉ cần mở và đóng cửa sổ vỏ để xóa nó.
Chris22

2
Trên OS X, Ctrl + L sẽ đệm thiết bị đầu cuối cho đến khi màn hình hiển thị rõ ràng. Bạn vẫn có thể cuộn lên để xem lịch sử. Sử dụng Cmd + K để xóa lịch sử hiển thị và in. Một danh sách đầy đủ hơn về các phím nóng thiết bị đầu cuối OS X
Andrew Franklin

2
Làm việc tuyệt vời cho tôi trong Ubuntu Desktop 16
Nam G VU

15

Cách làm của tôi là viết một hàm như vậy:

import os
import subprocess

def clear():
    if os.name in ('nt','dos'):
        subprocess.call("cls")
    elif os.name in ('linux','osx','posix'):
        subprocess.call("clear")
    else:
        print("\n") * 120

sau đó gọi clear()để xóa màn hình. cái này hoạt động trên windows, osx, linux, bsd ... tất cả các hệ điều hành.


Bạn có thể có nghĩa là os.name in ('linux','osx'), và cũng có thể muốn thêm 'posix'là tốt.
rsanden

@rsanden 'linux' và 'osx' bao gồm khá nhiều người sử dụng hệ điều hành HOẠT ĐỘNG sử dụng.
MartinUb Ubuntu 24/07/2015

Tôi đang chạy Ubuntu 15.04 và os.name == 'posix'trong cả python 2.7.9 và 3.4.3
rsanden 24/07/2015

@rsanden thêm posix.
MartinUbfox

9

Đây là một nền tảng chéo (Windows / Linux / Mac / Có lẽ là những nền tảng khác mà bạn có thể thêm vào trong đoạn kiểm tra nếu kiểm tra) tôi đã thực hiện kết hợp thông tin tìm thấy trong câu hỏi này:

import os
clear = lambda: os.system('cls' if os.name=='nt' else 'clear')
clear()

Cùng một ý tưởng nhưng với một muỗng đường cú pháp:

import subprocess   
clear = lambda: subprocess.call('cls||clear', shell=True)
clear()

8

Wiper rất tuyệt, điều tốt là tôi không phải gõ '()' xung quanh nó. Đây là một chút thay đổi của nó

# wiper.py
import os
class Cls(object):
    def __repr__(self):
        os.system('cls')
        return ''

Cách sử dụng khá đơn giản:

>>> cls = Cls()
>>> cls # this will clear console.

2
Tôi muốn đặt tên cho nó class cls.
martineau

1
Tôi muốn đặt tên cho trường hợp của class Clscls. cls = Cls()
Amol

Ngoại trừ việc gây ô nhiễm không gian tên ban đầu với hai thứ thay vì một ... gấp đôi.
martineau

@Amol Tôi đã sử dụng các kỹ thuật của bạn và của người khác trong giải pháp của tôi . Bạn có thể làm class clsvà sau đó cls=cls().
Alba Mendez

8

Đây là điều đơn giản nhất bạn có thể làm và nó không yêu cầu bất kỳ thư viện bổ sung nào. Nó sẽ xóa màn hình và trở về >>>góc trên cùng bên trái.

print("\033[H\033[J")

Điều này có lợi thế là nó cũng hoạt động trong Spyder.
Graham G

7

cho người dùng mac bên trong loại bàn điều khiển python

import os
os.system('clear')

cho cửa sổ

os.system('cls')

5

Đây là giải pháp dứt khoát hợp nhất tất cả các câu trả lời khác . Đặc trưng:

  1. Bạn có thể sao chép-dán mã vào trình bao hoặc tập lệnh của bạn.
  2. Bạn có thể sử dụng nó như bạn muốn:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. Bạn có thể nhập nó dưới dạng một mô-đun:

    >>> from clear import clear
    >>> -clear
  4. Bạn có thể gọi nó là một kịch bản:

    $ python clear.py
  5. thực sựđa nền tảng ; nếu nó không thể nhận ra hệ thống của bạn
    ( ce, nt, doshoặc posix) nó sẽ rơi trở lại in dòng trống.


Bạn có thể tải xuống tệp [đầy đủ] tại đây: https://gist.github.com/3130325
Hoặc nếu bạn chỉ tìm mã:

class clear:
 def __call__(self):
  import os
  if os.name==('ce','nt','dos'): os.system('cls')
  elif os.name=='posix': os.system('clear')
  else: print('\n'*120)
 def __neg__(self): self()
 def __repr__(self):
  self();return ''

clear=clear()


4

Sử dụng nhàn rỗi. Nó có nhiều tính năng tiện dụng. Ctrl+F6, ví dụ, đặt lại bàn điều khiển. Đóng và mở giao diện điều khiển là những cách tốt để xóa nó.


Làm thế nào để bạn làm điều đó trên nhàn rỗi? Chỉ cần đóng và mở lại?
Andrea Ambu

5
Không, F6không thiết lập lại giao diện điều khiển Idle, tuy nhiên, CTRL+F6không. Đáng tiếc là điều này không xóa màn hình. Ôi! (Python Win32 phiên bản nhàn rỗi 2.6.2, 2.7.1, 3.2).
Ridgerunner

4

Tôi không chắc liệu "shell" của Windows có hỗ trợ điều này không, nhưng trên Linux:

print "\033[2J"

https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes

Theo tôi gọi clschung oslà một ý tưởng tồi. Hãy tưởng tượng nếu tôi quản lý để thay đổi cls hoặc xóa lệnh trên hệ thống của bạn và bạn chạy tập lệnh của mình với tư cách quản trị viên hoặc root.


Tôi đồng ý cls không lý tưởng trong trường hợp này và trình tự thoát ANSI là tốt hơn. Cụ thể, sử dụng os để gọi một tiến trình mới là một hoạt động khá khó khăn, so với việc đẩy một vài byte vào thiết bị xuất chuẩn.
silviot

2

Tôi đang sử dụng MINGW / BASH trên Windows XP, SP3.

(dán cái này vào .pythonstartup)
# Loại ctrl-l của tôi đã hoạt động, nhưng điều này có thể giúp người khác
# để lại lời nhắc ở dưới cùng của cửa sổ mặc dù ...
nhập readline
readline.parse_and_bind ('\ Cl: xóa màn hình')

# Điều này hoạt động trong BASH vì tôi cũng có .inputrc, nhưng vì một số
lý do # nó bị bỏ khi tôi truy cập Python
readline.parse_and_bind ('\ Cy: kill-Whole-line')


Tôi không thể đứng gõ 'exit ()' nữa và rất vui mừng với các thủ thuật của martineau / Triptych:

Tôi hơi tài liệu về nó mặc dù (bị kẹt trong .pythonstartup)

class exxxit():
    """Shortcut for exit() function, use 'x' now"""
    quit_now = exit # original object
    def __repr__(self):
        self.quit_now() # call original
x = exxxit()

Py2.7.1>help(x)
Help on instance of exxxit in module __main__:

class exxxit
 |  Shortcut for exit() function, use 'x' now
 |
 |  Methods defined here:
 |
 |  __repr__(self)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  quit_now = Use exit() or Ctrl-Z plus Return to exit

2

Lệnh OS cleartrong Linux và clstrong Windows xuất ra một "chuỗi ma thuật" mà bạn chỉ có thể in. Để có được chuỗi, thực hiện lệnh bằng popen và lưu nó trong một biến để sử dụng sau:

from os import popen
with popen('clear') as f:
    clear = f.read()

print clear

Trên máy của tôi là chuỗi '\x1b[H\x1b[2J'.


1
1) Chuỗi ma thuật đó là một chuỗi ANSI . \x1b[Hcó nghĩa là "di chuyển con trỏ đến góc trên cùng bên trái", \x1b[2Jnghĩa là "xóa tất cả màn hình". 2) Trong các cửa sổ, ANSI không được nhận dạng nên có lẽ không có chuỗi ma thuật nào.
Alba Mendez

1
Mát mẻ! Ngoài ra, đối với bản in python3 ('\ x1b [H \ x1b [2J', end = ''); có thể giúp tránh dòng mới ở phía trước.
DenMark

Chuỗi ma thuật hoạt động trên bảng điều khiển Microsoft Windows 10 với Python 3.6 cho tôi. Tôi cố gắng cho chuỗi chuỗi không sử dụng với mở.
DevPlayer

2

Đây là hai cách tốt để làm điều đó:

1.

import os

# Clear Windows command prompt.
if (os.name in ('ce', 'nt', 'dos')):
    os.system('cls')

# Clear the Linux terminal.
elif ('posix' in os.name):
    os.system('clear')

2.

import os

def clear():
    if os.name == 'posix':
        os.system('clear')

    elif os.name in ('ce', 'nt', 'dos'):
        os.system('cls')


clear()

Nếu os.name không phải là một trong số này, tại sao không quay lại in các dòng trống?
Alba Mendez

Nếu đó là Jython thì tôi muốn bạn biết rằng os.name = 'java'
iChux

Có vẻ tốt, điều này có nghĩa là chương trình có thể trở thành đa nền tảng?
Lu-ca

2

Nếu nó là trên mac, thì đơn giản cmd + knên thực hiện thủ thuật.


2

Cách dễ nhất là sử dụng mô-đun os

>>> import os
>>> clear = lambda: os.system('clear')
>>> clear()

1

Điều này nên được nền tảng chéo, và cũng sử dụng ưa thích subprocess.callthay vì os.systemtheo các os.systemtài liệu . Nên hoạt động trong Python> = 2.4.

import subprocess
import os

if os.name == 'nt':
    def clearscreen():
        subprocess.call("cls", shell=True)
        return
else:
    def clearscreen():
        subprocess.call("clear", shell=True)
        return

1

Làm thế nào về điều này cho rõ ràng

- os.system('cls')

Đó là khoảng ngắn nhất có thể!


có, nhưng không phải đa nền tảng bạn phải gõ lại mỗi lần bạn muốn xóa màn hình.
Alba Mendez

1

Tôi mới biết về python (thực sự rất mới) và trong một trong những cuốn sách tôi đang đọc để làm quen với ngôn ngữ họ dạy cách tạo ra chức năng nhỏ này để xóa bảng điều khiển của hồ sơ tồn đọng có thể nhìn thấy và các lệnh và bản in trong quá khứ:

Mở shell / Tạo tài liệu mới / Tạo chức năng như sau:

def clear():
    print('\n' * 50)

Lưu nó trong thư mục lib trong thư mục python của bạn (của tôi là C: \ Python33 \ Lib) Lần tới khi bạn muốn xóa giao diện điều khiển của mình, chỉ cần gọi hàm với:

clear()

đó là nó. PS: bạn có thể đặt tên cho chức năng của bạn bằng mọi cách bạn muốn. Iv 'thấy mọi người sử dụng "gạt nước" "lau" và các biến thể.


1

Tôi đang sử dụng Spyder (Python 2.7) và để dọn dẹp bảng điều khiển trình thông dịch tôi sử dụng

%thông thoáng

điều đó buộc dòng lệnh đi lên trên cùng và tôi sẽ không thấy các lệnh cũ trước đó.

hoặc tôi nhấp vào "tùy chọn" trên môi trường Bảng điều khiển và chọn "Khởi động lại kernel" để loại bỏ mọi thứ.



1

Chỉ cần nhập

import os
os.system('cls') # Windows
os.system('clear') # Linux, Unix, Mac OS X

1

Nếu bạn không cần thực hiện thông qua mã, chỉ cần nhấn CTRL + L


Có, nó hoạt động, nhưng nếu bạn muốn tạo một lệnh trong tệp python của bạn để xóa bảng điều khiển, bạn sẽ không làm cho người dùng gõ một cái gì đó sau đó bảo họ tự xóa nó. bạn sẽ xóa giao diện điều khiển thông qua mã.
madladzen

1

Arch Linux (đã thử nghiệm xfce4-terminalvới Python 3):

# Clear or wipe console (terminal):
# Use: clear() or wipe()

import os

def clear():
    os.system('clear')

def wipe():
    os.system("clear && printf '\e[3J'")

... được thêm vào ~/.pythonrc

  • clear() xóa màn hình
  • wipe() lau toàn bộ bộ đệm đầu cuối

0

EDIT: Tôi vừa đọc "windows", cái này dành cho người dùng linux, xin lỗi.


Trong bash:

#!/bin/bash

while [ "0" == "0" ]; do
    clear
    $@
    while [ "$input" == "" ]; do
        read -p "Do you want to quit? (y/n): " -n 1 -e input
        if [ "$input" == "y" ]; then
            exit 1
        elif [ "$input" == "n" ]; then
            echo "Ok, keep working ;)"
        fi
    done
    input=""
done

Lưu nó dưới dạng "whatyouwant.sh", chmod + x rồi chạy:

./whatyouwant.sh python

hoặc một cái gì đó khác ngoài python (nhàn rỗi, bất cứ điều gì). Điều này sẽ hỏi bạn nếu bạn thực sự muốn thoát, nếu không nó sẽ chạy lại python (hoặc lệnh bạn đã đưa ra làm tham số).

Điều này sẽ xóa tất cả, màn hình và tất cả các biến / đối tượng / bất cứ thứ gì bạn đã tạo / nhập trong python.

Trong python chỉ cần gõ exit () khi bạn muốn thoát.


0

OK, vì vậy đây là một câu trả lời ít kỹ thuật hơn, nhưng tôi đang sử dụng plugin Python cho Notepad ++ và hóa ra bạn chỉ có thể xóa bàn điều khiển bằng tay bằng cách nhấp chuột phải vào nó và nhấp vào "xóa". Hy vọng điều này sẽ giúp ai đó ngoài kia!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.