source

Python에서 터미널 지우기

factcode 2022. 9. 17. 09:49
반응형

Python에서 터미널 지우기

Python 스크립트에서 터미널 화면을 클리어하기 위한 표준 "배터리와 함께" 방법이 존재합니까? 아니면 저주(단어가 아닌 라이브러리)를 해야 합니까?

은, 입니다.cls" " " 를 사용합니다.clear를 참조해 주세요.와 함께 사용하면 다음과 같이 원라이너가 됩니다.

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

탈출 시퀀스는 어때?

print(chr(27) + "[2J")

왜 아무도 Windows에서 L+를 L실행하거나 Mac에서 +를 실행하는 것에 대해 언급하지 않았습니까?화면을 지우는 가장 간단한 방법입니다.

저로서는 가장 우아한 변종입니다.

import os
os.system('cls||clear')

Windows, Mac 및 Linux의 경우 다음 코드를 사용할 수 있습니다.

import subprocess, platform

if platform.system()=="Windows":
    subprocess.Popen("cls", shell=True).communicate() #I like to use this instead of subprocess.call since for multi-word commands you can just type it out, granted this is just cls and subprocess.call should work fine 
else: #Linux and Mac
    print("\033c", end="")

test jamesnotjimprint("\033c", end="")와 Windows에서 동작하지 않기 에 Linux를 호출하는 (Windows windows Windows 로(((((((((windowswindowswindowswindowswindowswindows ) 。cls 본 안 print("\033c") 버전: "/"/" printf":subprocess.Popen("printf '\033c'", shell=True).communicate().

롤리카는 지적했다end=""이데올로기 때문에

Linux/UNIX 시스템에 있는 경우 ANSI 이스케이프 시퀀스를 인쇄하여 화면을 클리어하면 됩니다.또한 커서를 화면 맨 위로 이동해야 합니다.이것은, ANSI 를 서포트하는 모든 단말에서 동작합니다.

import sys
sys.stderr.write("\x1b[2J\x1b[H")

ANSI 지원을 사용하도록 설정하지 않으면 Windows에서 작동하지 않습니다.Windows에서도 동등한 제어 시퀀스가 있을 수 있지만, 저는 모릅니다.

사용방법:

print("\033c")

이렇게 하면 터미널 창이 지워집니다.

지우기를 사용할 수 있지만 일부 Linux 배포에서는 사용하지 못할 수 있습니다.Windows 에서는, 상기의 cls 를 사용합니다.

import subprocess
import platform

def clear():
    subprocess.Popen( "cls" if platform.system() == "Windows" else "clear", shell=True)

clear()

메모: 터미널 화면을 제어하는 것은 잘못된 것으로 간주될 수 있습니다.옵션 사용을 고려 중입니까?화면을 클리어 할지는, 유저에게 결정하는 것이 좋을지도 모릅니다.

이것은 Python2 또는 Python3 버전 모두에서 동작합니다.

print (u"{}[2J{}[;H".format(chr(27), chr(27)))

얼마 전에 이걸 발견했어

def clearscreen(numlines=100):
  """Clear the console.
numlines is an optional argument used only as a fall-back.
"""
# Thanks to Steven D'Aprano, http://www.velocityreviews.com/forums

  if os.name == "posix":
    # Unix/Linux/MacOS/BSD/etc
    os.system('clear')
  elif os.name in ("nt", "dos", "ce"):
    # DOS/Windows
    os.system('CLS')
  else:
    # Fallback for other operating systems.
    print('\n' * numlines)

clearscreen()만 사용합니다.

Pure Python 솔 pure 。
ANSI는 ANSI를 사용하는데, ANSI는 ANSI를 사용합니다.
표시중의 회선수를 통지할 수 있는 기능은, 단말기에 한정됩니다.

from shutil import get_terminal_size
print("\n" * get_terminal_size().lines, end='')

Python 버전 > = 3.3.0

그래서 그냥 여기서 내 의견을 말할까 해서...

아무도 OP 질문에 대해 정답을 제시하지 않은 것 같습니다.모두 'NO DONT USE os.system'이라고 대답하거나 합니다.이해롭습니다!!!'는 설명 없이 또는 새로운 행 인쇄에 의존하는 솔루션을 제공합니다.

어떤 이유로든 터미널 화면을 클리어하고 스크롤백해야 하는 사용자에게는 다음 코드를 사용할 수 있습니다.

import os

def clear():
    '''
    Clears the terminal screen and scroll back to present
    the user with a nice clean, new screen. Useful for managing
    menu screens in terminal applications.
    '''
    os.system('cls' if os.name == 'nt' else 'echo -e \\\\033c')

print('A bunch of garbage so we can garble up the screen...')
clear()

# Same effect, less characters...

def clear():
    '''
    Clears the terminal screen and scroll back to present
    the user with a nice clean, new screen. Useful for managing
    menu screens in terminal applications.
    '''
    os.system('cls||echo -e \\\\033c')

이것은 OP가 원하는 효과를 발휘합니다.이것은 os.system() 명령어를 사용하고 있기 때문에, 그것이 나쁘고, 서브프로세스.call()을 사용해 이것을 실장하는 방법을 알고 있는 사람이 있는 경우는, 저도 서브프로세스를 사용하고 싶지만, 전혀 익숙하지 않기 때문에 코멘트를 주세요.

기본적으로는 ANSI 이스케이프 시퀀스를 인식하기 때문에 이 함수는 gnome-terminal로 동작합니다. PROMPROMT가 됩니다.rows_max터미널 하단으로부터의 거리뿐만 아니라 정확히 호출된 위치로부터의 거리도 확인할 수 있습니다.어느 정도 클리어할지를 완전히 제어할 수 있습니다.

def clear(rows=-1, rows_max=None, *, calling_line=True, absolute=None,
          store_max=[]):
    """clear(rows=-1, rows_max=None)
clear(0, -1) # Restore auto-determining rows_max
clear(calling_line=False) # Don't clear calling line
clear(absolute=5) # Absolutely clear out to 5 rows up"""
    from os import linesep
    if rows_max and rows_max != -1:
        store_max[:] = [rows_max, False]
    elif not store_max or store_max[1] or rows_max == -1 or absolute:
        try:
            from shutil import get_terminal_size
            columns_max, rows_max = get_terminal_size()
        except ImportError:
            columns_max, rows_max = 80, 24
        if absolute is None:
            store_max[:] = [rows_max, True]
    if store_max:
        if rows == -1:
            rows = store_max[0]
        elif isinstance(rows, float):
            rows = round(store_max[0] * rows)
        if rows > store_max[0] - 2:
            rows = store_max[0] - 2
    if absolute is None:
        s = ('\033[1A' + ' ' * 30 if calling_line else '') + linesep * rows
    else:
        s = '\033[{}A'.format(absolute + 2) + linesep
        if absolute > rows_max - 2:
            absolute = rows_max - 2
        s += (' ' * columns_max + linesep) * absolute + ' ' * columns_max
        rows = absolute
    print(s + '\033[{}A'.format(rows + 1))

구현:

clear() # Clear all, TRIES to automatically get terminal height
clear(800, 24) # Clear all, set 24 as terminal (max) height
clear(12) # Clear half of terminal below if 24 is its height
clear(1000) # Clear to terminal height - 2 (24 - 2)
clear(0.5) # float factor 0.0 - 1.0 of terminal height (0.5 * 24 = 12)
clear() # Clear to rows_max - 2 of user given rows_max (24 - 2)
clear(0, 14) # Clear line, reset rows_max to half of 24 (14-2)
clear(0) # Just clear the line
clear(0, -1) # Clear line, restore auto-determining rows_max
clear(calling_line=False) # Clear all, don't clear calling line
clear(absolute=5) # Absolutely clear out to 5 rows up

라라터 paramet:rows는 프롬프트와 터미널 하단 사이에 추가하는 클리어 텍스트 행의 수이며, 모든 것을 위로 푸시합니다. rows_max는, 텍스트 행의 단말의 높이(또는 최대 클리어 높이)로, 1 회만 설정할 필요가 있습니다만, 언제라도 리셋 할 수 있습니다. *,세 번째 매개 변수 위치에서 다음 매개 변수가 모두 키워드임을 의미합니다(예: clear(absolute=5)). calling_line=True(기본값)은 대화형 모드에서 더 잘 작동합니다. calling_line=False는 텍스트 기반의 터미널 애플리케이션에 적합합니다. absolute는 단말기의 크기를 줄인 후 인터랙티브모드에서 글리치 갭 문제를 수정하기 위해 추가되었습니다.단말기 어플리케이션에도 사용할 수 있습니다. store_max 것입니다.rows_max.(가 값에 경우, 「」로 합니다.(「」 「」 「」 「」store_max 「 」의 합니다.store_max는 이 파라미터의 기본값을 변경합니다.인 스토리지입니다 , )) 、 )))))) ) 。

휴대성: 죄송합니다.IDLE 에서는 동작하지 않습니다만, ANSI 이스케이프 시퀀스를 인식하는 단말(콘솔)에서는 인터랙티브모드로 VERY COOL <<가 동작합니다.Ubuntu 13.10 Gnome-terminal Python 3.3으로 설정되었습니다.3.Python 3.3의 )에할 수 .shutil.get_terminal_size()BEST ANSI.print(...)파이썬 3번지다또한 간단한 텍스트 기반의 Tic Tac Toe 게임(어플리케이션)으로 테스트했습니다.

대화형 모드에서 사용하는 경우:첫 번째 복사 및 붙여넣기copy(...)인터랙티브모드로 기능하고 있는지 확인합니다.맑다파이를 사용하다 비단뱀 '3'같이 입력합니다.

>>> import sys
>>> sys.path
['', '/usr/lib/python3.3', ...

py 을 clear.py 중 합니다.pathPython이 찾을 수 있도록 나열된 디렉토리입니다(기존 파일을 덮어쓰지 마십시오)."CHANGE: "CHANGE: "CHANGE: " 。

>>> from clear import clear
>>> clear()
>>> print(clear.__doc__)
clear(rows=-1, rows_max=None)
clear(0, -1) # Restore auto-determining rows_max
clear(calling_line=False) # Don't clear calling line
clear(absolute=5) # Absolutely clear out to 5 rows up

터미널 응용 프로그램에서 사용하는 경우:를 배치하다copy(...)main.py 파일과 같은 폴더에 있는 clear.py 라는 이름의 파일로 기능합니다.다음은 Tic Tac Toe 게임 어플리케이션(단말 프롬프트: python3 ticactoe에서 실행)의 작업 요약(skeleton) 예입니다.py):

from os import linesep

class TicTacToe:    
    def __init__(self):
        # Clear screen, but not calling line
        try:
            from clear import clear
            self.clear = clear
            self.clear(calling_line=False)
        except ImportError:
            self.clear = False
        self.rows = 0    # Track printed lines to clear

        # ...
        self.moves = [' '] * 9

    def do_print(self, *text, end=linesep):
        text = list(text)
        for i, v in enumerate(text[:]):
            text[i] = str(v)
        text = ' '.join(text)
        print(text, end=end)
        self.rows += text.count(linesep) + 1

    def show_board(self):
        if self.clear and self.rows:
            self.clear(absolute=self.rows)
        self.rows = 0
        self.do_print('Tic Tac Toe')
        self.do_print('''   |   |
 {6} | {7} | {8}
   |   |
-----------
   |   |
 {3} | {4} | {5}
   |   |
-----------
   |   |
 {0} | {1} | {2}
   |   |'''.format(*self.moves))

    def start(self):
        self.show_board()
        ok = input("Press <Enter> to continue...")
        self.moves = ['O', 'X'] * 4 + ['O']
        self.show_board()
        ok = input("Press <Enter> to close.")

if __name__ == "__main__":
    TicTacToe().start()

명::do_print(...)은 19행의 입니다.print(...)하다.self.rows를 참조하지 않으면, 를 참조하지 않을 를 참조해 주세요. ★★★★★★★★★★★★★★★★★★★★★·self.rows += 1도도가 있는 print(...)전체 프로그램에서 호출됩니다.그래서 매번 이사회를 다시 그릴 때마다show_board()이전 보드는 삭제되고 새 보드는 원래 위치대로 인쇄됩니다. ★★self.clear(calling_line=False)회선 9 의 경우, 기본적으로는 모든 것이 단말기의 하부에 상대적으로 푸시 됩니다만, 원래의 발신 회선은 클리어 되지 않습니다.그에 반해서,self.clear(absolute=self.rows)은 29행의 모든 .self.rows모든 것을 터미널 바닥에서 위쪽으로 밀어올리는 것이 아니라 위쪽으로 이동해야 합니다.

: 3.3 사용자: Put Python 3.3 사용자: Put#!/usr/bin/env python3틱택토의 맨 앞줄에 있어요py 파일.틱톡을 오른쪽 클릭합니다.py 파일 = > 속성 = > 권한 탭 = > 실행 확인:파일을 프로그램으로 실행할 수 있습니다.파일 = > [ Run in Terminal ]버튼을 더블 클릭합니다.열려 있는 단말기의 현재 디렉토리가 ticactoe의 디렉토리인 경우.py file, 파일을 시작할 수도 있습니다../tictactoe.py.

python 쉘을 사용하고 있을 때 단말기를 클리어하고 싶은 경우.그런 다음 다음을 수행하여 화면을 지울 수 있습니다.

import os
os.system('clear')

Windows 에서는, 다음을 사용할 수 있습니다.

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

수 는 termfo에 .curses★★★★★★★★★★★★★★★★★★.

python -c "from os import system; system('clear')"

하시면 됩니다.call():

from subprocess import call
call("clear")

당신만의 것을 만들 수 있어요.이것은, 사용의 단말이나 OS타입에 의존하지 않습니다.

def clear(num):
    for i in range(num): print 

clear(80)
print "hello"

그러면 25개의 새로운 행이 지워집니다.

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

clear()

나는 pydev와 일식을 사용한다.num in range보다 newline 솔루션이 더 마음에 듭니다.for 루프는 경고를 발생시키는 반면 새 줄을 인쇄하면 경고를 발생시키지 않습니다.clear 문에 줄 바꿈 수를 지정하려면 이 변동을 사용해 보십시오.

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

clear(25)

화면을 클리어하는 것만으로 충분합니다.문제는 Linux 버전 간에 100% 크로스 플랫폼 방식을 사용할 수 없다는 것입니다.문제는 단말기의 구현이 모두 약간 다른 것을 지원한다는 것입니다."맑음"은 모든 곳에서 통할 것이라고 확신합니다.그러나 더 "완전"한 대답은 xterm 컨트롤 문자를 사용하여 커서를 이동하는 것이지만, 이 경우 xterm 자체가 필요합니다.

문제를 더 잘 모르더라도 해결 방법은 충분해 보입니다.

화면을 클리어하는 방법은 아마 싸구려이지만, 제가 아는 플랫폼에서는 다음과 같습니다.

for i in xrange(0,100):
    print ""

bash처럼 보이게 하기 위해 다음과 같이 하겠습니다.

홈 디렉토리에 .pythonstartup이라는 이름의 파일을 만들고 함수에 poke's answer를 사용하면 됩니다.

Linux의 경우:

echo "from subprocess import call
def clear(int=None):  
    call('clear')
    if int == 0:
       exit()
clear()" >> $HOME/.pythonstartup ; export PYTHONSTARTUP=$HOME/.pythonstartup ; python

해서 더하면 요.export PYTHONSTARTUP=$HOME/.pythonstartupyour ./bashrc

interpreter python interpreter는 할 수 .clear()지하하유

일반 기능처럼 사용하면 종료 상태를 인쇄하지 않고 다음과 같은 트릭을 수행할 수 있습니다.

>>> clear()

인수 0을 함수에 전달하면 화면이 지워지고 정상적으로 종료되므로 깨끗한 화면에서 셸을 계속 사용할 수 있습니다.

>>> clear(0)

Windows의 경우 인터프리터 명령줄에서만 (GUI가 아님)간단히 다음과 같이 입력합니다(python에는 올바른 들여쓰기를 사용해야 합니다).

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

clear()셸(명령줄)에서 셸의 화면이 지워집니다.셸을 종료할 경우 새로운 Python(명령줄) 셸을 열 때 위의 작업을 다시 수행해야 합니다.

주의: 사용하고 있는 Python의 버전은 명시적으로 상관없습니다(2.5, 2.7, 3.3, 3.4).

받아들여진 답변은 좋은 해결책이다.문제는 지금까지 Windows 10, Linux 및 Mac에서만 작동한다는 것입니다.Yes Windows(ANSI 지원이 없는 것으로 알려져 있음)이 신기능은, ANSI 서포트를 포함한 Windows 10(이후)에 실장되어 있습니다만, 이 기능을 유효하게 할 필요가 있습니다.그러면 크로스 플랫폼 방식으로 화면이 지워집니다.

import os

print ('Hello World')
os.system('') 
print ("\x1B[2J")

Windows 10 이하에서는, 다음과 같이 반환됩니다.

[2J

이는 이전 Windows 빌드에서는 ANSI가 지원되지 않기 때문입니다., 이 문제는 컬러라마 모듈을 사용하여 해결할 수 있습니다.이것에 의해, Windows 에서의 ANSI 문자의 서포트가 추가됩니다.

ANSI 이스케이프 문자 시퀀스는 Unix 및 Mac에서 색칠된 터미널 텍스트 및 커서 위치를 생성하기 위해 오랫동안 사용되어 왔습니다.Colorama는 stdout을 래핑하고 검출된 ANSI 시퀀스를 삭제(출력에서는 gobbledykuk로 표시됨)한 후 적절한 win32 콜로 변환하여 단말 상태를 수정함으로써 Windows에서도 이 기능을 수행합니다.다른 플랫폼에서는 Colorama는 아무것도 하지 않습니다.

크로스 플랫폼 방법은 다음과 같습니다.

import sys

if sys.platform == 'win32':
    from colorama import init
    init()

print('Hello World')

print("\x1B[2J")

★★★print(chr(27) + "[2J") 대신 print("\x1B[2J").


@poke 답변은 Windows에서 매우 불안정합니다. 네, 작동하지만 정말 해킹입니다.「 」라고 하는 cls.bat ★★★★★★★★★★★★★★★★★」cls.exe스크립트와 동일한 사전에서 명령어와 충돌하여 명령 대신 파일이 실행되므로 보안에 큰 위험이 발생합니다.

중 는 '어디서든'의 입니다.cls츠키다

import os
os.system('cd C:\\Windows|cls' if os.name == 'nt' else 'clear')

그러면 Currant Dictionary가 다음과 같이 변경됩니다.C:\Window(여기에서는 백슬래시가 중요합니다)를 실행합니다. C:\Windows는 항상 존재하며, 여기에 쓰려면 관리 권한이 필요합니다.따라서 위험을 최소화하면서 이 명령을 실행하는 것이 좋습니다.또 다른 솔루션은 명령 프롬프트가 아닌 PowerShell을 통해 명령을 실행하는 것입니다. 이러한 취약성에 대한 보안이 확보되어 있기 때문입니다.

이 질문에는 다른 방법도 기재되어 있습니다.사용할 수 있는 셸 내의 화면을 클리어합니다.

" " " 입니다.os.system("clear")/os.system("cls") 타입을 0140 int 0으로 합니다.변수를 지정하고 삭제하면 화면을 완전히 지울 수 있습니다.

def clear():
    if (os.name == 'nt'):    
        c = os.system('cls')
    else:
        c = os.system('clear')
    del c  # can also omit c totally

#clear()

이것은 모든 플랫폼에서 작동하며 Python 2와 3 모두에서 작동합니다.

def clear(number):
    for i in range(number):
        print(" ")

'먹다'라고 입력합니다.clear(numberhere).

언급URL : https://stackoverflow.com/questions/2084508/clear-terminal-in-python

반응형