2010-08-15 19 views
18

में आउटपुट को फिर से लिखना कैसे है मेरे पास एक पायथन स्क्रिप्ट है और मैं इसे टर्मिनल में 0 से 100% तक बढ़ती संख्या प्रदर्शित करना चाहता हूं। मुझे पता है कि टर्मिनल पर संख्याओं को कैसे मुद्रित किया जाए, लेकिन मैं उन्हें "फिर से लिख" कैसे सकता हूं, इसलिए 0 1, 1 में 2 में बदल जाता है, और 100 तक?टर्मिनल

उत्तर

23

एक गाड़ी वापसी (\r) एक नई पंक्ति के बिना मुद्रण पंक्ति के आरम्भ में कर्सर को रीसेट करता है, अगले प्रिंट अधिलेखन क्या पहले से ही मुद्रित है बनाने:

import time 
import sys 
for i in range(100): 
    print i, 
    sys.stdout.flush() 
    time.sleep(1) 
    print "\r", 

इस लाइन को साफ नहीं करता है, इसलिए यदि आप इस विधियों का उपयोग करके घटते संख्याओं को प्रिंट करने का प्रयास करते हैं, आपको पिछले प्रिंटों से बचे हुए पाठ दिखाई देंगे। आप रिक्त स्थान के साथ अपने आउटपुट को पैड करके या अन्य उत्तरों में कुछ नियंत्रण कोड का उपयोग करके इसके आसपास काम कर सकते हैं।

+3

क्या यह मंच स्वतंत्र है? –

+9

@ क्लेज़: शायद सभी टर्मिनलों के लिए नहीं। यह टाइपराइटर के लिए काम करता है। क्या वह मंच आपके लिए पर्याप्त स्वतंत्र है? :) –

+2

मेरे निपटान (लिनक्स और विंडोज) पर दो प्लेटफार्मों पर, यह काम करता है। –

5

यह नुस्खा here उपयोगी साबित होना चाहिए।

from tc import TerminalController 
from time import sleep 
import sys 

term = TerminalController() 

for i in range(10): 
    sys.stdout.write("%3d" % i) 
    sys.stdout.flush() 
    sleep(2) 
    sys.stdout.write(term.BOL + term.CLEAR_EOL) 

नुस्खा terminfo का उपयोग करता है टर्मिनल के बारे में जानकारी प्राप्त करने के लिए और टर्मिनलों के एक नंबर के लिए लिनक्स और ओएस एक्स में काम करता है: टीसी के रूप में है कि मॉड्यूल का उपयोग करना, निम्नलिखित कोड आप क्या चाहते हैं नहीं करता है। यह विंडोज पर काम नहीं करता है, हालांकि। (नीचे टिप्पणी के अनुसार, परीक्षण के लिए piquadrat के लिए धन्यवाद)।

संपादित करें: नुस्खा रंगों का उपयोग करने और रेखा के पुन: लिखने के लिए क्षमताओं को भी प्रदान करता है। इसमें एक तैयार पाठ प्रगति पट्टी भी है।

+3

के रूप में अनुरोध किया है, मैं पर अपने कोड की कोशिश की विंडोज़ (विंडोज 7, पायथन 2.7)। आउटपुट "0 1 2 3 4 5 6 7 8 9" है। –

+0

@piquadrat: बहुत बहुत धन्यवाद। –

+0

यह काम करता है लेकिन यह अधिक है। – vy32

0

पर this answer आधार पर, लेकिन टर्मिनल नियंत्रक के बिना:

import time 
import sys 
for i in range(100): 
    sys.stdout.write("Downloading ... %s%%\r" % (i)) 
    sys.stdout.flush() 
    time.sleep(1) 

सूक्ति टर्मिनल (लिनक्स) और Windows कंसोल पर परीक्षण किया गया।

युक्ति: इस उदाहरण को आईडीएलई संपादक में न चलाएं।

2

blessings package का उपयोग करना - अपनी स्क्रीन (स्पष्ट/सीएलएस) स्पष्ट और दर्ज करें:

import sys 
from blessings import Terminal 
from time import sleep # <- boy, does this sound tempting a.t.m. 

term = Terminal() 
for i in range(6): 
    with term.location(term.width - 3, term.height - 3):   
     print('{}'.format(i)) 
    sleep(2) 
    if (i == 3): 
     print('what was I doing, again?') 
print('done') 

CheeseShop से इसे स्थापित करने के लिए, बस ...

pip install blessings