2016-01-09 7 views
5

मैं प्रगति पट्टी लिख रहा हूं क्योंकि यह How to animate the command line? सुझाता है। मैं पिचर्म का उपयोग करता हूं और इस फ़ाइल को रन टूल विंडो में चलाता हूं।पायथन 3: प्रिंट (somestring, end = ' r', flush = True) कुछ भी नहीं दिखाता

import time 
def show_Remaining_Time(time_delta): 
    print('Time Remaining: %d' % time_delta, end='\r', flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

हालांकि, अगर मैं यह .py फ़ाइल चलाता हूं तो कोड कुछ भी प्रदर्शित नहीं करता है। मैं क्या गलत कर रहा हूं?


मैंने कोशिश की घुड़दौड़ का सुझाव है लेकिन यह अभी भी काम कर रहा है, तो मैं print फ़ंक्शन का उपयोग नहीं कर रहा है।

हालांकि निम्न स्क्रिप्ट अपेक्षित के रूप में काम करता है।

  1. क्यों stdout काम करता है लेकिन प्रिंट() नहीं:

    import time 
    import sys 
    def show_Remaining_Time(time_delta): 
        sys.stdout.write('\rtime: %d' % time_delta) # Doesn't work if I use 'time: %d\r' 
        sys.stdout.flush() 
    if __name__ == '__main__': 
        count = 0 
        while True: 
         show_Remaining_Time(count) 
         count += 1 
         time.sleep(1) 
    

    मैं अब 2 प्रश्न हैं।

  2. क्यों How to animate the command line? सुझाव देता है कि \r अंत में मुझे अपने मामले में शुरुआत में लिखना है?

+1

इंटरैक्टिव दुभाषिया में मेरे लिए ठीक काम करता है। क्या आप किसी अजीब खोल में किसी भी मौके पर चल रहे हैं, कहें, आईडीईएल खोल? – ShadowRanger

+0

@ShadowRanger मैं इसे पिचर्म रन रन विंडो के साथ चला रहा हूं। अगर मैं 'end =' \ r'' पास नहीं करता हूं तो यह सामान्य के रूप में प्रिंट करता है। लेकिन मैं एक ही पंक्ति को अद्यतन रखना चाहता हूं। – spacegoing

+0

हाँ, PyCharm की रन विंडो सामान्य टर्मिनल नहीं है। यह कैरिज को जिस तरह से आप चाहते हैं उसे वापस नहीं लेता है। एक सामान्य कमांड प्रॉम्प्ट में चलाएं। – ShadowRanger

उत्तर

0

समस्या यह है कि अंत में '\ r' उस रेखा को साफ़ करता है जिसे आपने अभी मुद्रित किया है, किस बारे में?

import time 
def show_Remaining_Time(time_delta): 
    print("\r") 
    print('Time Remaining: %d' % time_delta, flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

इस तरह, आप पहली पंक्ति साफ़ करें, और तब इच्छित प्रदर्शन प्रिंट, नींद की अवधि के लिए स्क्रीन में रखते हुए।

+2

अधिकांश टर्मिनल पर मुझे पता है कि '\ r' कुछ भी स्पष्ट नहीं करता है। यह कर्सर को ले जाता है, लेकिन वहां क्या है उसे ओवरराइट करने के लिए आगे की आउटपुट की आवश्यकता होती है। साथ ही, आप अपने प्रिंटों में से किसी एक के लिए स्वत: नई लाइन को अक्षम नहीं कर रहे हैं, इसलिए नेट प्रभाव प्रत्येक आउटपुट को एक नई लाइन पर प्रिंट करना है; स्पष्ट '' r'' 'प्रिंट' कुछ भी नहीं करता है। – ShadowRanger

+0

अन्य समस्याएं एक तरफ (जैसा कि अंत = '' का उपयोग नहीं कर रहा है), यह मेरे लिए चाल है। – arielnmz

+0

मुझे इस काम को जिस तरह से अपेक्षित करने के लिए 'प्रिंट (' \ r ', end =' ')' और 'प्रिंट ('आउटपुट', एंड = '', फ्लश = ट्रू) 'का उपयोग करना था। हालांकि अच्छे शुरुआती बिंदु के लिए धन्यवाद! –

0
this method u can print in same command line: 
import time 
def show_Remaining_Time(time_delta): 
    print(' \r%d:Time Remaining' % time_delta, end = '',flush=False) 

if __name__ == '__main__': 
    count = 0 
    while True and count < 10: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 
संबंधित मुद्दे