Xóa màn hình trong vỏ


90

Chỉ cần một câu hỏi nhanh:
Làm thế nào để bạn xóa màn hình trong vỏ? Tôi đã thấy những cách như:

import os
os.system('cls')

Thao tác này chỉ mở cmd cửa sổ, xóa màn hình và đóng lại nhưng tôi muốn cửa sổ trình bao bị xóa
(PS: Tôi không biết điều này có ích gì, nhưng tôi đang sử dụng phiên bản 3.3.2 của Python)
Cảm ơn bạn :)


Câu trả lời:


57

Đối với macOS / OS X, bạn có thể sử dụng mô-đun quy trình con và gọi 'cls' từ shell:

import subprocess as sp
sp.call('cls', shell=True)

Để ngăn '0' hiển thị trên đầu cửa sổ, hãy thay thế dòng thứ 2 bằng:

tmp = sp.call('cls', shell=True)

Đối với Linux, bạn phải thay thế clslệnh bằngclear

tmp = sp.call('clear', shell=True)

3
Tôi đang sử dụng Mac OS X và tôi đã thử điều này import subprocess as sp sp.call('clear',shell=True)hoạt động, ngoại trừ có một 0ở trên cùng của cửa sổ đầu cuối.
Daniel Dropik

0 là giá trị trả về của lệnh gọi 'cls' từ shell. tôi đã chỉnh sửa câu trả lời để loại bỏ điều đó, bằng cách chỉ cần lưu trữ giá trị đó trong một biến.
GalHai

9
Hãy thử điều nàyctrl+L
Sai Ram

Điều đó hoạt động trên dòng lệnh. Câu hỏi là làm thế nào để làm điều đó trong Python.
Edward Falk

Cảm ơn vì giải pháp, tôi đã thiếu shell = True. để ngăn số 0 hiển thị, bạn cũng có thể thêm dấu chấm phẩy vào cuối câu lệnh. sp.call('cls', shell=True);
Waylon Walker

84

Còn phím tắt CTRL+ Lthì sao?

Nó hoạt động cho tất cả các shell, ví dụ như Python, Bash, MySQL, MATLAB, v.v.


6
Rất tiếc, không hoạt động trên Windows bao gồm cả cmd mới trong Windows10
9a3eedi

Khi sử dụng quy trình con để tự động hóa, cách tiếp cận này không hoạt động.
MountainLion

64
import os

os.system('cls')  # For Windows
os.system('clear')  # For Linux/OS X

Ngoài ra, os.system('clear')đối với các thiết bị đầu cuối Mac OS X (được xác nhận là hoạt động với trình bao mặc định bashvà cả đối với csh).
jvriesem

Bạn cũng có thể xác định một hàm để chạy điều này, như: def cls (): os.system ('cls') (nhấn enter hai lần). Sau đó, bạn chỉ cần gõ cls () để xóa màn hình.

Câu hỏi đặt ra là làm thế nào để thực hiện điều này trong shell.
Kyle Delaney

1
@KyleDelaney trong khi không hiệu quả, nó hoạt động trong shell. Cũng có nhiều người thấy điều này hữu ích vì đó là những gì họ đang tìm kiếm.
Gaspa79

12

Loại thứ mà bạn đang tìm kiếm sẽ được tìm thấy trong mô-đun lời nguyền.

I E

import curses  # Get the module
stdscr = curses.initscr()  # initialise it
stdscr.clear()  # Clear the screen

Lưu ý quan trọng

Điều quan trọng cần nhớ là trước bất kỳ lần thoát nào, bạn cần đặt lại thiết bị đầu cuối ở chế độ bình thường, điều này có thể được thực hiện bằng các dòng sau:

curses.nocbreak()
stdscr.keypad(0)
curses.echo()
curses.endwin()

Nếu không, bạn sẽ nhận được tất cả các loại hành vi kỳ lạ. Để đảm bảo rằng điều này luôn được thực hiện, tôi khuyên bạn nên sử dụng mô-đun atexit, giống như:

import atexit

@atexit.register
def goodbye():
    """ Reset terminal from curses mode on exit """
    curses.nocbreak()
    if stdscr:
        stdscr.keypad(0)
    curses.echo()
    curses.endwin()

Có thể sẽ làm tốt.


Bạn có thể cụ thể hơn không?
josh

1
Tôi đang chạy Mac OS X 10.7.5 và iTerm 2 cho thiết bị đầu cuối của mình. Sử dụng Python2.7, stdscr = curses.initscr()hoạt động để xóa màn hình và stdscr.clear()không làm gì cả. Sử dụng Python3.4, stdscr = curses.initscr()nó sẽ xóa màn hình, nhưng làm mất khả năng xử lý dòng mới của thiết bị đầu cuối. Khi tôi nhấn enter liên tục, nó sẽ hiển thị như sau: >>> >>> >>> >>> v.v. Tôi vẫn có thể gõ lệnh, nhưng chúng không hiển thị. Ngoài ra, hành vi này vẫn tồn tại ngay cả khi tôi exit()Python. TRÁNH SỬ DỤNG!
jvriesem

@jvriesem, mô-đun lời nguyền đã được sử dụng trong một thời gian dài và được rất nhiều người sử dụng - Tôi khuyên bạn nên xem liệu bạn có thể tái tạo hành vi trong một thời gian ngắn, (20 dòng hoặc lâu hơn), ví dụ và đăng nó như một câu hỏi tràn ngăn xếp hoặc trong danh sách gửi thư của nhà phát triển.
Steve Barnes

Ý kiến ​​hay - đó là phản hồi tốt hơn câu "TRÁNH SỬ DỤNG!" tuyên bố. Hai dòng đầu tiên của câu trả lời này là hai dòng lặp lại vấn đề cho tôi. Bạn có biết liệu có bất kỳ lý do gì khiến cursesmô-đun có thể gặp sự cố tương thích (Windows so với Mac và Linux) không? Tôi có thể xác nhận rằng ít nhất sự cố này xảy ra trên hai thiết bị đầu cuối Mac khác nhau. Hành vi vẫn tồn tại trong BASH nhưng không tồn tại trong CSH. Hmm .... Bạn có nghĩ rằng tôi nên liên hệ với nhà phát triển lời nguyền, nhà phát triển shell hay chỉ hỏi cộng đồng SO? Cảm ơn một lần nữa!
jvriesem

@jvriesem - Tôi đã cập nhật câu trả lời của mình để bao gồm cách đặt lại thiết bị đầu cuối của bạn về chế độ tiêu chuẩn sau khi bạn hoàn tất, bao gồm cả khi thoát.
Steve Barnes

12

Dưới đây là một số tùy chọn mà bạn có thể sử dụng trên Windows

Lựa chọn đầu tiên:

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

>>> cls()

Sự lựa chọn thứ hai:

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

>>> cls()

Tùy chọn thứ ba nếu bạn đang ở trong cửa sổ Python REPL:

Ctrl+L

9

Ngoài việc là một thư viện CLI tuyệt vời toàn diện, clickcòn cung cấp một clear()chức năng bất khả tri nền tảng :

import click
click.clear()

7

Chức năng này hoạt động trong bất kỳ hệ điều hành nào (Unix, Linux, macOS và Windows)
Python 2 và 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

Trong windows, lệnh là cls, trong hệ thống giống như unix, lệnh này là clear.
platform.system()trả về tên nền tảng. Ví dụ. 'Darwin'cho macOS.
subprocess.call()thực hiện một cuộc gọi hệ thống. Ví dụ.subprocess.call(['ls','-l'])


6

Một cách dễ dàng hơn để xóa màn hình khi ở trong python là sử dụng Ctrl+ Lmặc dù nó hoạt động cho shell cũng như các chương trình khác.


4

Nếu bạn đang sử dụng thiết bị đầu cuối linux để truy cập python, thì cntrl + l là giải pháp tốt nhất để xóa màn hình


4

Tôi đang sử dụng một lớp chỉ sử dụng một trong các phương thức trên ... Tôi nhận thấy nó hoạt động trên Windows và Linux ... Mặc dù vậy, tôi thích sử dụng nó vì nó dễ nhập hơn clear () thay vì system ('clear' ) hoặc os.system ('clear')

pip3 install clear-screen

from clear_screen import clear

và sau đó khi bạn muốn xóa shell:

clear()

3

bằng cách sử dụng windows 10pyhton3.5, tôi đã thử nghiệm nhiều mã và không có gì giúp tôi nhiều hơn điều này:

Trước tiên, hãy xác định một hàm đơn giản, hàm này sẽ in ra 50 dòng mới; (số 50 sẽ phụ thuộc vào số dòng bạn có thể nhìn thấy trên màn hình của mình, vì vậy bạn có thể thay đổi số này)

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

sau đó chỉ cần gọi nó bao nhiêu lần bạn muốn hoặc cần

cls()

Không có ý tưởng lệnh xây dựng sẵn nào phù hợp với tôi. tạo ra điều này, chức năng của riêng tôi tất nhiên đã làm.
DashingQuark

2

Command+K hoạt động tốt trong OSX để xóa màn hình.

Shift+Command+K để chỉ xóa bộ đệm cuộn ngược.



1

Quy trình con cho phép bạn gọi "cls" cho Shell.

import subprocess
cls = subprocess.call('cls',shell=True)

Điều đó đơn giản như tôi có thể làm được. Hi vọng nó sẽ giúp ích cho bạn!


1
  1. bạn có thể sử dụng Window hoặc Linux Os

    import os
    os.system('cls')
    os.system('clear')
    
  2. bạn có thể sử dụng mô-đun quy trình con

    import subprocess as sp
    x=sp.call('cls',shell=True)
    

1

os.system('cls')hoạt động tốt khi tôi mở chúng. Nó mở theo kiểu cmd.



0

Đây là cách tạo lệnh của riêng bạn clshoặc clearlệnh sẽ hoạt động mà không cần gọi hàm nào một cách rõ ràng!

Chúng tôi sẽ tận dụng thực tế là bảng điều khiển python gọi repr()để hiển thị các đối tượng trên màn hình. Điều này đặc biệt hữu ích nếu bạn có trình bao python tùy chỉnh của riêng mình ( -iví dụ: với tùy chọn) và bạn có tập lệnh tải trước cho nó. Đây là những gì bạn cần:

import os
class ScreenCleaner:
    def __repr__(self):
        os.system('cls')  # This actually clears the screen
        return ''  # Because that's what repr() likes

cls = ScreenCleaner()

Sử dụng clearthay vì clsnếu bạn đang sử dụng linux (trong cả oslệnh và tên biến)!

Bây giờ nếu bạn chỉ cần viết clshoặc cleartrong bảng điều khiển - nó sẽ rõ ràng! Không chẵn cls()hoặc clear()- chỉ là biến thô. Điều này là do python sẽ gọi repr(cls)để in nó ra, từ đó sẽ kích hoạt __repr__chức năng của chúng ta .

Hãy kiểm tra nó ra:

>>> 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

Và màn hình rõ ràng!

Để làm rõ - mã trên cần được nhập vào bảng điều khiển như thế này

from somefile import cls

Hoặc tải trước trực tiếp với một cái gì đó như:

python -i my_pre_loaded_classes.py

0

Đó là cách tốt nhất:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()

3
Tôi không thực sự thấy câu trả lời của bạn cải thiện như thế nào so với bất kỳ câu trả lời nào đã được đưa ra trong những năm trước.
David Buck

Ai cần thì xem. Tôi không cần cải thiện. cảm ơn nhé người anh em.
Fahimbd_14

2
anh ấy đã không nói về việc cải thiện câu trả lời của bạn. Anh ấy nói rằng câu trả lời của bạn không hữu ích, bởi vì người khác đã đưa ra câu trả lời tương tự.
OmikronWeapon

0

Đối với Python IDLE 3.8.1, bạn có thể khởi động lại Shell

CTRL + F6

Trên menu Bấm vào menu Shell. Sau đó nhấp vào tùy chọn Khởi động lại Shell.

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.