복붙노트

[PYTHON] 회전하는 명령 행 커서를 만드는 방법은 무엇입니까?

PYTHON

회전하는 명령 행 커서를 만드는 방법은 무엇입니까?

파이썬을 사용하여 단말기에서 회전 커서를 인쇄하는 방법이 있습니까?

해결법

  1. ==============================

    1.당신의 터미널이 \ b를 처리한다고 가정하고, 이와 같은 것

    당신의 터미널이 \ b를 처리한다고 가정하고, 이와 같은 것

    import sys
    import time
    
    def spinning_cursor():
        while True:
            for cursor in '|/-\\':
                yield cursor
    
    spinner = spinning_cursor()
    for _ in range(50):
        sys.stdout.write(next(spinner))
        sys.stdout.flush()
        time.sleep(0.1)
        sys.stdout.write('\b')
    
  2. ==============================

    2.좋은 pythonic 방법 itertools.cycle를 사용하는 것입니다 :

    좋은 pythonic 방법 itertools.cycle를 사용하는 것입니다 :

    import itertools, sys
    spinner = itertools.cycle(['-', '/', '|', '\\'])
    while True:
        sys.stdout.write(spinner.next())  # write the next character
        sys.stdout.flush()                # flush stdout buffer (actual character display)
        sys.stdout.write('\b')            # erase the last written char
    

    또한 http://www.interclasse.com/scripts/spin.php와 같이 긴 함수 호출 중에 회 전자를 표시하는 스레딩을 사용할 수도 있습니다.

  3. ==============================

    3.사용하기 쉬운 API (별도의 스레드에서 실행 스피너가 실행 됨) :

    사용하기 쉬운 API (별도의 스레드에서 실행 스피너가 실행 됨) :

    import sys
    import time
    import threading
    
    class Spinner:
        busy = False
        delay = 0.1
    
        @staticmethod
        def spinning_cursor():
            while 1: 
                for cursor in '|/-\\': yield cursor
    
        def __init__(self, delay=None):
            self.spinner_generator = self.spinning_cursor()
            if delay and float(delay): self.delay = delay
    
        def spinner_task(self):
            while self.busy:
                sys.stdout.write(next(self.spinner_generator))
                sys.stdout.flush()
                time.sleep(self.delay)
                sys.stdout.write('\b')
                sys.stdout.flush()
    
        def start(self):
            self.busy = True
            threading.Thread(target=self.spinner_task).start()
    
        def stop(self):
            self.busy = False
            time.sleep(self.delay)
    

    필요한 경우 코드의 아무 곳이나 :

    spinner = Spinner()
    spinner.start()
    # ... some long-running operations
    # time.sleep(3) 
    spinner.stop()
    
  4. ==============================

    4.해결책 :

    해결책 :

    import sys
    import time
    
    print "processing...\\",
    syms = ['\\', '|', '/', '-']
    bs = '\b'
    
    for _ in range(10):
        for sym in syms:
            sys.stdout.write("\b%s" % sym)
            sys.stdout.flush()
            time.sleep(.5)
    

    핵심은 백 스페이스 문자 '\ b'를 사용하고 stdout을 플러시하는 것입니다.

  5. ==============================

    5.물론 가능합니다. 그것은 "커서"가 회전하는 것처럼 보이게하는 네 개의 문자 사이에 백 스페이스 문자 (\ b)를 인쇄하는 것입니다. (-, \, |, /).

    물론 가능합니다. 그것은 "커서"가 회전하는 것처럼 보이게하는 네 개의 문자 사이에 백 스페이스 문자 (\ b)를 인쇄하는 것입니다. (-, \, |, /).

  6. ==============================

    6.저주 모듈. addstr () 및 addch () 함수를 살펴 보겠습니다. 결코 그것을 사용하지 마십시오.

    저주 모듈. addstr () 및 addch () 함수를 살펴 보겠습니다. 결코 그것을 사용하지 마십시오.

  7. ==============================

    7.보다 고급 콘솔 조작을 원한다면, 유닉스에서는 curses python 모듈을 사용할 수 있고, Windows에서는 curses 라이브러리와 동일한 기능을 제공하는 WConio를 사용할 수 있습니다.

    보다 고급 콘솔 조작을 원한다면, 유닉스에서는 curses python 모듈을 사용할 수 있고, Windows에서는 curses 라이브러리와 동일한 기능을 제공하는 WConio를 사용할 수 있습니다.

  8. ==============================

    8.멋진 진행 바 모듈 가져 오기 - http://code.google.com/p/python-progressbar/ RotatingMarker를 사용하십시오.

    멋진 진행 바 모듈 가져 오기 - http://code.google.com/p/python-progressbar/ RotatingMarker를 사용하십시오.

  9. ==============================

    9.

    #!/usr/bin/env python
    
    import sys
    
    chars = '|/-\\'
    
    for i in xrange(1,1000):
        for c in chars:
            sys.stdout.write(c)
            sys.stdout.write('\b')
            sys.stdout.flush()
    

    경고 : 내 경험에 의하면 이것은 모든 터미널에서 작동하지 않습니다. Unix / Linux에서 이것을 수행하는 좀 더 강력한 방법은 curses 모듈을 사용하는 것이 더 복잡합니다. Windows에서는 작동하지 않습니다. 백그라운드에서 진행되는 실제 처리로 어떻게 느려지는지를 알고 싶을 것입니다.

  10. ==============================

    10.

    import sys
    def DrowWaitCursor(self, counter):
        if counter % 4 == 0:
            print("/",end = "")
        elif counter % 4 == 1:
            print("-",end = "")
        elif counter % 4 == 2:
            print("\\",end = "")
        elif counter % 4 == 3:
            print("|",end = "")
        sys.stdout.flush()
        sys.stdout.write('\b') 
    

    이것은 매개 변수가있는 함수를 사용하는 또 다른 솔루션이 될 수 있습니다.

  11. ==============================

    11.여기에 - 가볍고 간단합니다.

    여기에 - 가볍고 간단합니다.

    import sys
    import time
    
    idx = 0
    cursor = ['|','/','-','\\'] #frames of an animated cursor
    
    while True:
        sys.stdout.write(cursor[idx])
        sys.stdout.write('\b')
        idx = idx + 1
    
        if idx > 3:
            idx = 0
    
        time.sleep(.1)
    
  12. ==============================

    12.크고 단순한 해결책 :

    크고 단순한 해결책 :

    import sys
    import time
    cursor = ['|','/','-','\\']
    for count in range(0,1000):
      sys.stdout.write('\b{}'.format(cursor[count%4]))
      sys.stdout.flush()
      # replace time.sleep() with some logic
      time.sleep(.1)
    

    분명한 한계가 있지만 다시 원유가있다.

  13. from https://stackoverflow.com/questions/4995733/how-to-create-a-spinning-command-line-cursor by cc-by-sa and MIT license