ล้างหน้าจอในเชลล์


90

คำถามสั้น ๆ :
คุณจะล้างหน้าจอในเชลล์ได้อย่างไร? ฉันเคยเห็นวิธีต่างๆเช่น:

import os
os.system('cls')

นี่เพิ่งเปิด windows cmd ล้างหน้าจอและปิด แต่ฉันต้องการล้างหน้าต่างเชลล์
(PS: ฉันไม่รู้ว่ามันช่วยได้ แต่ฉันใช้ Python เวอร์ชัน 3.3.2)
ขอบคุณ :)


อาจซ้ำกันได้ของHow to clear python interpreter console?
Cees Timmerman

คำตอบ:


57

สำหรับ macOS / OS X คุณสามารถใช้โมดูลกระบวนการย่อยและเรียก 'cls' จากเชลล์:

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

เพื่อป้องกันไม่ให้ '0' แสดงที่ด้านบนของหน้าต่างให้แทนที่บรรทัดที่ 2 ด้วย:

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

สำหรับ Linux คุณต้องแทนที่clsคำสั่งด้วยclear

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

3
ฉันใช้ Mac OS X และฉันได้ลองใช้วิธีนี้import subprocess as sp sp.call('clear',shell=True)ซึ่งได้ผลยกเว้นมี0ที่ด้านบนของหน้าต่างเทอร์มินัล
Daniel Dropik

0 คือค่าส่งคืนของการเรียกคำสั่ง 'cls' จากเชลล์ ฉันแก้ไขคำตอบเพื่อกำจัดสิ่งนั้นเช่นกันโดยเก็บค่านั้นไว้ในตัวแปร
GalHai

9
ลองดูctrl+L
สายราม

ที่ทำงานบนบรรทัดคำสั่ง คำถามคือทำอย่างไรใน Python
Edward Falk

ขอบคุณสำหรับวิธีแก้ปัญหาฉันหายไปเชลล์ = จริง เพื่อป้องกันไม่ให้ 0 แสดงขึ้นคุณยังสามารถเพิ่มอัฒภาคต่อท้ายคำสั่งได้ sp.call('cls', shell=True);
Waylon Walker

85

แล้วทางลัดCTRL+ Lล่ะ?

ใช้ได้กับทุกเชลล์เช่น Python, Bash, MySQL, MATLAB เป็นต้น


8
น่าเสียดายที่ไม่ทำงานบน Windows รวมถึง cmd ใหม่ใน Windows10
9a3eedi

เมื่อใช้กระบวนการย่อยสำหรับระบบอัตโนมัติวิธีนี้ไม่ได้ผล
mountainLion

64
import os

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

นอกจากนี้os.system('clear')สำหรับเทอร์มินัล Mac OS X (ยืนยันว่าทำงานกับเชลล์เริ่มต้นbashและสำหรับcsh)
jvriesem

คุณยังสามารถกำหนดฟังก์ชันเพื่อเรียกใช้สิ่งนี้ได้เช่น: def cls (): os.system ('cls') (กด Enter สองครั้ง) จากนั้นคุณสามารถพิมพ์ cls () เพื่อล้างหน้าจอ

คำถามเกี่ยวกับวิธีการทำสิ่งนี้ในเชลล์
Kyle Delaney

1
@KyleDelaney ในขณะที่ไม่มีประสิทธิภาพมันทำงานในเชลล์ หลายคนพบว่าสิ่งนี้มีประโยชน์เพราะนั่นคือสิ่งที่พวกเขากำลังมองหา
Gaspa79

12

ประเภทของสิ่งที่คุณกำลังมองหามีอยู่ในโมดูลคำสาป

กล่าวคือ

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

อาจจะทำได้ดี


คุณสามารถเจาะจงมากขึ้นได้หรือไม่?
จอช

1
ฉันใช้ Mac OS X 10.7.5 และ iTerm 2 สำหรับเทอร์มินัลของฉัน การใช้ Python2.7 stdscr = curses.initscr()ทำงานเพื่อล้างหน้าจอและstdscr.clear()ไม่ทำอะไรเลย การใช้ Python3.4 stdscr = curses.initscr()จะเป็นการล้างหน้าจอ แต่จะขจัดความสามารถของเทอร์มินัลในการประมวลผลบรรทัดใหม่ เมื่อฉันกด Enter ซ้ำ ๆ จะให้สิ่งต่อไปนี้: >>> >>> >>> >>> และอื่น ๆ ฉันยังพิมพ์คำสั่งได้ แต่ไม่ปรากฏขึ้นมา นอกจากนี้พฤติกรรมนี้ยังคงมีอยู่แม้ว่าฉันจะexit()Python ก็ตาม หลีกเลี่ยงการใช้งาน!
jvriesem

@jvriesem โมดูลคำสาปถูกใช้งานมาเป็นเวลานานและมีผู้คนจำนวนมากใช้ - ฉันขอแนะนำให้คุณดูว่าคุณสามารถทำซ้ำพฤติกรรมในระยะสั้น ๆ (20 บรรทัดหรือมากกว่านั้น) เช่นและโพสต์ เป็นคำถามล้นสแต็กหรือในรายชื่ออีเมลของนักพัฒนา
Steve Barnes

ความคิดที่ดีนั่นเป็นการตอบสนองที่ดีกว่า "หลีกเลี่ยงการใช้!" ของฉัน คำให้การ. สองบรรทัดแรกของคำตอบนี้คือสองบรรทัดที่จำลองปัญหาให้ฉัน คุณทราบหรือไม่ว่ามีสาเหตุใดที่cursesโมดูลอาจมีปัญหาความเข้ากันได้ (Windows เทียบกับ Mac เทียบกับลินุกซ์) ฉันสามารถยืนยันได้ว่าปัญหานี้เกิดขึ้นกับเครื่อง Mac สองเครื่องที่แตกต่างกันอย่างน้อยที่สุด พฤติกรรมยังคงอยู่ใน BASH แต่ไม่ใช่ CSH อืม .... คุณคิดว่าฉันควรติดต่อผู้พัฒนาคำสาปผู้พัฒนาเชลล์หรือเพียงแค่ถามชุมชน SO ขอบคุณอีกครั้ง!
jvriesem

@jvriesem - ฉันได้อัปเดตคำตอบของฉันเพื่อรวมวิธีรีเซ็ตเทอร์มินัลของคุณเป็นโหมดมาตรฐานเมื่อคุณทำเสร็จแล้วรวมถึงทางออกใด ๆ
Steve Barnes

12

นี่คือตัวเลือกบางส่วนที่คุณสามารถใช้ได้บน Windows

ตัวเลือกแรก:

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

>>> cls()

ตัวเลือกที่สอง:

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

>>> cls()

ตัวเลือกที่สามหากคุณอยู่ในหน้าต่าง Python REPL:

Ctrl+L

9

นอกเหนือจากการเป็นไลบรารี CLI ที่ยอดเยี่ยมแล้วclickยังมีclear()ฟังก์ชันที่ไม่เชื่อเรื่องพระเจ้าของแพลตฟอร์ม:

import click
click.clear()

7

ฟังก์ชันนี้ใช้งานได้ในระบบปฏิบัติการใด ๆ (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

ในหน้าต่างคำสั่งclsใน UNIX clearเหมือนระบบคำสั่งคือ
platform.system()ส่งคืนชื่อแพลตฟอร์ม เช่น 'Darwin'สำหรับ macOS
subprocess.call()ทำการโทรระบบ เช่นsubprocess.call(['ls','-l'])


6

วิธีที่ง่ายกว่าในการล้างหน้าจอขณะอยู่ใน python คือการใช้Ctrl+ Lแม้ว่ามันจะใช้ได้กับเชลล์และโปรแกรมอื่น ๆ


4

หากคุณใช้ linux terminal เพื่อเข้าถึง python cntrl + l เป็นทางออกที่ดีที่สุดในการล้างหน้าจอ


4

ฉันใช้คลาสที่ใช้วิธีใดวิธีหนึ่งข้างต้นเบื้องหลัง ... ฉันสังเกตว่ามันใช้ได้กับ Windows และ Linux ... ฉันชอบใช้มันเพราะมันง่ายกว่าที่จะพิมพ์ clear () แทน system ('clear' ) หรือ os.system ('ชัดเจน')

pip3 install clear-screen

from clear_screen import clear

จากนั้นเมื่อคุณต้องการล้างเปลือก:

clear()

3

ใช้windows 10และpyhton3.5ฉันได้ทดสอบรหัสมากมายและไม่มีอะไรช่วยฉันได้มากไปกว่านี้:

ขั้นแรกกำหนดฟังก์ชันง่ายๆฟังก์ชันนี้จะพิมพ์ 50 บรรทัดใหม่ (หมายเลข 50 จะขึ้นอยู่กับจำนวนบรรทัดที่คุณเห็นบนหน้าจอคุณจึงสามารถเปลี่ยนหมายเลขนี้ได้)

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

จากนั้นเรียกมันกี่ครั้งก็ได้ตามที่คุณต้องการหรือต้องการ

cls()

ไม่มีแนวคิดคำสั่งที่สร้างขึ้นพร้อมใช้งานสำหรับฉัน การสร้างสิ่งนี้แน่นอนว่าหน้าที่ของฉันเองก็ทำ
DashingQuark

2

Command+K ทำงานได้ดีใน OSX เพื่อล้างหน้าจอ

Shift+Command+K เพื่อล้างเฉพาะบัฟเฟอร์เลื่อนกลับ



1

กระบวนการย่อยช่วยให้คุณสามารถเรียก "cls" สำหรับ Shell ได้

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

มันง่ายที่สุดเท่าที่ฉันจะทำได้ หวังว่าจะเหมาะกับคุณ!


1
  1. คุณสามารถใช้ Window หรือ Linux Os

    import os
    os.system('cls')
    os.system('clear')
    
  2. คุณสามารถใช้โมดูลกระบวนการย่อย

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



0

นี่คือวิธีสร้างของคุณเองclsหรือclearคำสั่งที่จะทำงานโดยไม่ต้องเรียกใช้ฟังก์ชันใด ๆ อย่างชัดเจน!

เราจะใช้ประโยชน์จากข้อเท็จจริงที่ว่า python console เรียกร้อง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()

ใช้clearแทนclsว่าคุณใช้ linux (ทั้งใน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

0

นั่นเป็นวิธีที่ดีที่สุด:

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

3
ฉันไม่เห็นว่าคำตอบของคุณดีขึ้นอย่างไรสำหรับคำตอบใด ๆ ที่ให้ไว้ในปีก่อน ๆ
David Buck

ผู้ที่ต้องการจะเห็น ฉันไม่จำเป็นต้องปรับปรุงครับ ขอบคุณครับ
Fahimbd_14

2
เขาไม่ได้พูดถึงการปรับปรุงคำตอบของคุณ เขาระบุว่าคำตอบของคุณไม่มีประโยชน์เพราะมีคนอื่นให้คำตอบเดียวกันไปแล้ว
OmikronWeapon

0

สำหรับ Python IDLE 3.8.1 คุณสามารถรีสตาร์ทเชลล์

CTRL + F6

บนเมนูคลิกที่เมนูเชลล์ จากนั้นคลิกที่ตัวเลือกรีสตาร์ทเชลล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.