Tercüman konsolu nasıl temizlenir?


325

Çoğu Python geliştiricisi gibi, ben de Python yorumlayıcısının komutları, dir()şeyleri help() stuffvb. Test etmeye çalışırken bir konsol penceresini açık tutuyorum .

Herhangi bir konsol gibi, bir süre sonra geçmiş komutların ve baskıların görünür birikmesi karmaşık hale gelir ve bazen aynı komutu birkaç kez yeniden çalıştırırken kafa karıştırıcı olur. Python yorumlayıcı konsolunu temizleyip temizlemeyeceğini ve nasıl temizleyeceğini merak ediyorum.

Bir sistem çağrısı yapmayı ve clsWindows ya clearda Linux'u aramayı duydum , ancak yorumlayıcının kendisine komut verebileceğim bir şey olmasını umuyordum.

Not: Windows'ta çalışıyorum, bu yüzden Ctrl+Lçalışmıyor.



Kimsenin bahsetmediğine şaşırdım. Ancak Ipython kabuğunu kullanırken Windows'da bile Ctrl + L yapabilirsiniz
user93

Yanıtlar:


442

Bahsettiğiniz gibi, bir sistem çağrısı yapabilirsiniz:

Pencereler için

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

Linux için lambda olur

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

1
Bu cevap istediğim şeyin 'ruhuna' en yakın, teşekkürler.
Soviut

1
+1, güzel cevap. Dönüş değerini göstermemesi için tüketmenin bir yolu var mı? Net çalıştıktan sonra bir '0' alıyorum.
technomalogical

15
Geri dönüş değeri Yok olacağından lambda yerine normal bir işlevde tanımlayın '0' göstermemelidir.
Akbar ibrahim

46
Kullanmanın nesi yanlış def? Neden lambdaa defdaha net olduğunda a kullanıyorsunuz ?
S.Lott

17
@Akbaribrahim as Hiçbiri yazdırılmayacak bunu deneyin:clear = lambda: os.system('cls') or None
enpenax

193

burada biraz daha çapraz platform olan kullanışlı bir şey

import os

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

# now, to clear the screen
cls()

Bir şeyler yapmak için harika bir yol, cehennem gibi kullanışlı bir kod satırı kaydetmek için yukarıdaki lambda önerisiyle birleştirin! Teşekkür ederim! :)
Torxed

import os os.system('cls')
Nhu Vy

1
TERM ortam değişkeni ayarlanmadı.
Jonathan

87

İşte hızlı bir saldırı:

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

Veya bazı yazımları kaydetmek için bu dosyayı python arama yolunuza koyun:

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

wipe = Wipe()

Sonra bunu istediğiniz gibi yorumlayıcıdan yapabilirsiniz :)

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

12
Haha, bu oldukça komik. Tam olarak ne aradığını değil, ama güzel bir deneyin.
Soviut

4
@Triptych: c = "\ n" * 100 yararlı, +1. Temizler ve kabuğun dibine getiren küçük bir yorum, ben kabuğun üstünden başlamayı tercih ederim.
pythonbeginer

1
Veya, terminal öykünücünüz ANSI'yi yorumluyorsa daha iyi yapın:"\x1B[H\x1B[J"
Alba Mendez

8
İnsanların gülmesine rağmen, birçok yeni satır yazdırmak, dış süreçlerin clearve işlerin aynısıdır cls. Bunu yapmanın yolu budur . (sadece bir baskı veya baskı çağrısıyla bir işlev, elbette "net" bir dizeye atama değil)
jsbueno

4
@jsbueno hayır değil. Peki belki windows (şüphem rağmen, konsol temizlemek için API vardır). Diğer tüm sistemlerde, clearekranı temizleyen bir yönerge çıkarır. Geri kaydırma arabelleğini çöpe atmadan. Benim sistemde, bu kontrol dizisini verir: \33[3J\33[H\33[2J. Yani: [erase scrollback] [reset cursor position] [erase screen]. Kullanılarak [erase scrollback]çıkarılabilir clear -x.
spektrumlar

28

Bu daha eski bir soru olmasına rağmen, diğer cevapların en iyisi olduğunu düşündüğüm bir şeyi katkıda bulunacağımı düşündüm ve bu komutları bir dosyaya koyup PYTHONSTARTUP'ınızı ayarlamanızı önererek kendi kırışıklığımı ekledim ortam değişkeni işaret eder. Şu anda Windows'da olduğum için, bu şekilde biraz önyargılı, ancak başka bir yöne kolayca eğilebilir.

Windows'da ortam değişkenlerinin nasıl ayarlanacağını açıklayan bazı makaleler
    aşağıdadır : sys.path.append ne zaman kullanılır ve% PYTHONPATH% değiştirilirken yeterlidir
    Windows XP'de Ortam Değişkenlerini Yönetme
    Sistem ve Kullanıcı Ortamı Değişkenlerini Yapılandırma
    Global Sistem Nasıl Kullanılır Windows'ta Ortam Değişkenleri

BTW, dosyada boşluk olsa bile dosyanın yoluna tırnak koymayın.

Her neyse, Python başlangıç ​​komut dosyasını koymak (veya mevcut kodunuza eklemek) için kodu almam:

# ==== 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, @ Triptych'in __repr__ hilesini exit()sadece exit(ve diğer adı için ditto'ya quit) değiştirmek için de kullanabilirsiniz :

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

quit = exit = exit()

Son olarak, gelen istemi birincil tercüman değiştirir burada başka en şey >>>için cwd + >>>:

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

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

Bu muhtemelen en iyi cevaptır - diğer cevaplardan tekniklerin bir kombinasyonu. PYTHONSTARTUP + repr + os.system ('cls'). Çok hoş.
Triptik

@Triptych: __repr__ve / veya __str__bu şekilde kullanmanın ilginç bir yan etkisi >>> vars(), yorumlayıcı konsoluna yazarsanız , bu şekilde tanımlanan tüm komutları yürütmesidir. Örneğin, sistemimde ekranı temizledi ve konsoldan çıktı. Heck'in neler olduğunu anlamak için bir süre aldı ....
martineau

ilginç. Bu sorun da geçerlidir bakınız locals()ve globals(). Bu işlevleri çevreleyen, adı silen ve işlev çağrısından sonra yeniden atayan basit bir dekoratör olası bir çözümdür ...
Triptych

@Triptych: Dekoratör fikri, en azından kendi girişimlerimle çalışmıyor gibi görünüyor. Uygun bir alternatif bulmak şaşırtıcı bir zorluğu kanıtlıyor.
martineau

Sadece vars () globals () ve locals () çağrılarının sonucunu
Triptych

28

Windows'ta bunu yapmanın birkaç yolu var:

1. Klavye kısayolunu kullanarak:

Press CTRL + L

2. sistem çağırmak yöntemi kullanarak:

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

3. 100 kez yeni çizgi baskı kullanarak:

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

5
Bütün bu yollar çok ... naff. clssadece Windows üzerinde çalışacak ve programınızı çapraz platform haline getirecek, 100 baskı newlinessadece ... eww? Programda klavye kısayolu kullanılmaz.
Luke

22

Şüphesiz en hızlı ve en kolay yol Ctrl+ L.

Bu, terminaldeki OS X için de aynıdır.


3
Windows 8.1 ctrl tuşu ile büyük veya küçük "L" kullanarak bu çözümü denedim. Benim için işe yaramıyor. Temizlemek için kabuk penceresini açıp kapatıyorum.
Chris22

2
OS X'te, ekran netleşene kadar Ctrl + L terminali doldurur. Geçmişi görmek için yukarı kaydırmaya devam edebilirsiniz. Ekran ve çıktı geçmişini temizlemek için Cmd + K tuşlarını kullanın. OS X terminal kısayol tuşlarının daha kapsamlı bir listesi
Andrew Franklin

2
Ubuntu Desktop 16'da benim için güzel çalış
Nam G VU

15

Bunu yapmanın yolu şöyle bir işlev yazmaktır:

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

sonra clear()ekranı temizlemek için arayın . bu windows, osx, linux, bsd ... tüm işletim sistemlerinde çalışır.


Bunu demek isteyebilirsiniz os.name in ('linux','osx')ve ayrıca eklemek isteyebilirsiniz 'posix'.
rsanden

@rsanden 'linux' ve 'osx', işletim sisteminin GERÇEKTEN kullandığı tüm insanları kapsar.
MartinUbuntu

Ubuntu 15.04 çalıştırıyorum ve os.name == 'posix'hem python 2.7.9 hem de 3.4.3'te
rsanden

@rsanden posix ekledi.
MartinUbuntu

9

İşte bu soruda bulunan bilgileri birleştirerek yaptığım çapraz platform (Windows / Linux / Mac / Muhtemelen if çekine ekleyebileceğiniz diğerleri) sürüm snippet'i:

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

Aynı fikir ama bir kaşık sözdizimsel şekerle:

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

8

Silecek harika, bunun hakkında iyi bir şey, etrafına '()' yazmak zorunda kalmam. İşte ona küçük bir varyasyon

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

Kullanımı oldukça basit:

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

2
Ben adlandırırdım class cls.
martineau

1
class ClsOlmak için örneğini adlandırırdım cls. cls = Cls()
Amol

Bunun dışında, ilk ad alanını bir değil iki şeyle kirletiyor ... iki kat daha fazla.
martineau

@Amol Siz ve başkalarının tekniklerini benim çözümümde kullandım . Yapabilirsin class clsve sonra cls=cls().
Alba Mendez

8

Bu yapabileceğiniz en basit şeydir ve herhangi bir ek kitaplık gerektirmez. Ekranı temizler ve >>>sol üst köşeye döner .

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

Bunun avantajı Spyder'da da çalışmasıdır.
Graham G

7

python konsolu türü içindeki mac kullanıcısı için

import os
os.system('clear')

pencereler için

os.system('cls')

5

İşte diğer tüm cevapları birleştiren kesin çözüm . Özellikleri:

  1. Sen edebilirsiniz kopyalayıp yapıştırın kabuğundan veya komut dosyası içine kod.
  2. İstediğiniz gibi kullanabilirsiniz :

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. Sen edebilirsiniz içe bir modül olarak:

    >>> from clear import clear
    >>> -clear
  4. Sen edebilirsiniz çağrı bir komut dosyası olarak:

    $ python clear.py
  5. Öyle gerçekten çok platformlu ; o sistem tanımıyor eğer
    ( ce, nt, dosveya posix) o boş satır baskı işlemine geçer.


[Full] dosyasını buradan indirebilirsiniz: https://gist.github.com/3130325
Veya sadece kodu arıyorsanız:

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

Boşta kullan. Birçok kullanışlı özelliğe sahiptir. Ctrl+F6, örneğin, konsolu sıfırlar. Konsolu kapatmak ve açmak, temizlemenin iyi bir yoludur.


boşta nasıl yapıyorsun? Sadece kapat ve yeniden aç?
Andrea Ambu

5
Hayır, F6Boşta konsolunu sıfırlamaz, ancak sıfırlar CTRL+F6. Ne yazık ki bu yok değil ekranı temizlemek. D'oh! (Python Win32 Idle sürüm 2.6.2, 2.7.1, 3.2).
ridgerunner

4

Windows'un "kabuğu" nun bunu destekleyip desteklemediğinden emin değilim, ancak Linux'ta:

print "\033[2J"

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

Çağıran Bence clsbirlikte osgenellikle kötü bir fikirdir. Sisteminizde cls veya clear komutunu değiştirmeyi başarabildiğimi ve komut dosyanızı yönetici veya kök olarak çalıştırdığınızı düşünün.


Bu durumda cls'nin ideal olmadığını ve ANSI kaçış dizisinin daha iyi olduğunu kabul ediyorum. Özellikle os'u yeni bir işlem başlatmak için kullanmak, birkaç baytı stdout'a itmekle karşılaştırıldığında oldukça pahalı bir işlemdir.
silviot

2

Windows XP, SP3'te MINGW / BASH kullanıyorum.

(bunu .pythonstartup içinde yapıştırın)
# Ctrl-l zaten çalıştım, ancak bu başka birinin
# pencerenin altındaki istemi bırakmasına yardımcı olabilir ...
import readline
readline.parse_and_bind ('\ Cl: clear-screen')

# Bu, BASH'de çalışıyor çünkü ben de .inputrc'de var, ancak
# nedense Python
readline.parse_and_bind ('\ Cy: kill-whole-line') 'a gittiğimde düşüyor


Artık 'exit ()' yazmaya dayanamadım ve martineau'nun / Triptych'in hilelerinden memnun kaldım:

Ama biraz doktora yaptım (.pythonstartup içinde sıkışmış)

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

clearLinux ve clsWindows'taki OS komutu , yazdırabileceğiniz bir "sihirli dize" üretir. Dizeyi almak için, komutu popen ile yürütün ve daha sonra kullanmak üzere bir değişkene kaydedin:

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

print clear

Makinemde dize var '\x1b[H\x1b[2J'.


1
1) Bu sihirli dize bir ANSI dizisidir . \x1b[H"imleci sol üst köşeye taşı", \x1b[2J"tüm ekranı temizle " anlamına gelir. 2) Pencerelerde ANSI tanınmaz, bu yüzden muhtemelen sihirli bir dize yoktur.
Alba Mendez

1
Güzel! Ayrıca, python3 baskı için ('\ x1b [H \ x1b [2J', end = ''); öndeki yeni çizgiden kaçınmaya yardımcı olabilir.
DenMark

Sihirli dize benim için Python 3.6 ile Microsoft Windows 10 konsolunda çalıştı. Ben string ile dizisi için plus kullanımı değil plussed.
DevPlayer

2

İşte bunu yapmanın iki güzel yolu:

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

Os.name bunlardan hiçbiri değilse, neden boş satırlar yazdırmaya geri dönmeyesiniz?
Alba Mendez

Jython ise os.name = 'java'
iChux

İyi görünüyor, bu programın çapraz platform haline gelebileceği anlamına mı geliyor?
Luke


2

En kolay yol os modülünü kullanmaktır

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

1

Bu çapraz platform olabilir, ve aynı zamanda tercih edilen kullanır gerekir subprocess.callyerine os.systemgöre Dokümanlar . Python'da çalışmalı> = 2.4.os.system

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

Net bir şekilde buna ne dersiniz?

- os.system('cls')

Bu olabildiğince kısa!


evet, ama çok platformlu değil ve bunu ekrana temizlemek istediğiniz her seferinde tekrar yazmak zorunda.
Alba Mendez

1

Python'da (gerçekten yeni) yeniyim ve okuduğum kitaplardan birinde, görünür biriktirme listesi ve geçmiş komutların ve baskıların konsolunu temizlemek için bu küçük işlevi nasıl oluşturacaklarını öğrettikleri dil:

Kabuğu aç / Yeni belge oluştur / Aşağıdaki gibi işlev oluştur:

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

Python dizininizdeki lib klasörünün içine kaydedin (benimki C: \ Python33 \ Lib'dir) Konsolunuzu bir sonraki temizlemeniz gerektiğinde işlevi şu şekilde çağırmanız yeterlidir:

clear()

bu kadar. PS: istediğiniz şekilde işlev adlandırabilirsiniz. Iv '"silme" "silme" ve varyasyon kullanan insanlar gördüm.


1

Spyder (Python 2.7) kullanıyorum ve kullandığım yorumlayıcı konsolunu temizlemek için

%açık

komut satırını en üste gitmeye zorlar ve önceki eski komutları görmeyeceğim.

veya Konsol ortamında "seçenek" i tıklıyorum ve her şeyi kaldıran "Çekirdeği yeniden başlat" ı seçiyorum.



1

Sadece girin

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

1

Kodu kullanarak yapmanız gerekmiyorsa, CTRL + L tuşlarına basın


Evet bu işe yarıyor, ama python dosyanızda konsolu temizleyen bir komut yapmak istersen, sadece bir şey yazmazsınız, daha sonra kendilerine temizlemelerini söylerdiniz. konsolu kodla temizlersiniz.
madladzen

1

Arch Linux ( xfce4-terminalPython 3 ile test edilmiştir ):

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

import os

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

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

... ilave ~/.pythonrc

  • clear() ekranı temizler
  • wipe() tüm terminal arabelleğini siler

0

EDIT: Ben sadece "windows" okudum, bu linux kullanıcıları için, üzgünüm.


Bash'da:

#!/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

"Whatyouwant.sh" olarak kaydedin, chmod + x sonra çalıştırın:

./whatyouwant.sh python

veya python'dan başka bir şey (boşta, her neyse). Bu gerçekten çıkmak isteyip istemediğinizi soracaktır, eğer değilse python'u (veya parametre olarak verdiğiniz komutu) yeniden çalıştırın.

Bu, tüm ekranı ve tüm değişkenleri / nesneyi / python'da oluşturduğunuz / içe aktardığınız her şeyi temizleyecektir.

Python'da çıkmak istediğinizde exit () yazın.


0

Tamam, bu çok daha az teknik bir cevap, ama Notepad ++ için Python eklentisini kullanıyorum ve sadece sağ tıklayıp "temizle" yi tıklayarak konsolu manuel olarak temizleyebilirsiniz. Umarım bu birisine yardım eder!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.