Python - Как заменить несколько выходных линий? - PullRequest
0 голосов
/ 03 мая 2020

У меня три выхода, и я хочу заменять его каждые 3 секунды.

С этим кодом он печатает только c:

import sys

import time

a = 1

b = 5

c =10

while True:

  sys.stdout.write("\r" + str(a))

  sys.stdout.write("\r" + str(b))

  sys.stdout.write("\r" + str(c))

  time.sleep(3)

  a += 1

  b+=1

  c+=1

  sys.stdout.flush()

У кого-нибудь есть альтернатива вывести их все в 3 строки?

Ответы [ 4 ]

1 голос
/ 03 мая 2020

все вышеперечисленное верно. Просто убедитесь, что создали некоторую конечную точку для While l oop.

import sys 
import time
import os 

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

a = 1
b = 5
c =10

while c<20:
  sys.stdout.write("\r" "****************************\n") 
  sys.stdout.write("\r" "This is Run : " + str(a) + "\n")
  sys.stdout.write("\r" "****************************\n")
  sys.stdout.write("\r" " This is a : " + str(a) +  "\n This is b :" +  str(b) + "\n This is C:"  +str(c) + "\n" )

  time.sleep(2)

  a += 1
  b+=1
  c+=1
  sys.stdout.flush()
  clear()

На основании вашего ответа я думаю, что это то, что вы ищете. Когда я запускаю его из консоли, он очищает выходные данные.

0 голосов
/ 03 мая 2020

Это происходит потому, что команда sys.std.write перезаписывает выходные данные. Выходы очищаются только при вызове sys.stdout.flush(). Хотя эта команда также просто очищает буфер данных , который является временной областью, в которой python временно хранит данные. Следовательно, нажатие на него просто поместит курсор на новую строку, то есть эквивалент \n символа новой строки.

Итак, в основном вам нужно написать \n символ новой строки в конце строки, чтобы показать все входные данные.

Кроме того, если вы хотите очистить консоль, вы можете использовать os.system('clear').

Вы можете использовать следующий код для более чистого вывода.

import os
import sys
import time

a, b, c = 1, 5, 10

while True:
    sys.stdout.write(f"a:{a} b:{b} c:{c}\n")
    time.sleep(3)
    a += 1
    b += 1
    c += 1
    #clear console
    os.system('clear')
0 голосов
/ 03 мая 2020

Причина, по которой вы видите только c, как вы упомянули, заключается в том, что это последнее, что вы написали перед вызовом sys.stdout.flush()

Если вы удалите часть, где sys.stdout.write("\r" + str(c)), вы увидите b

Поскольку @ Błotosmętek упомянул и ответил передо мной, вы можете отформатировать требуемый вывод и затем выполнить грипп sh.

0 голосов
/ 03 мая 2020

Нет, это - это печать a, сразу же перезаписывая его с помощью b, а затем c, так что c - это все, что вы видите. Единственный способ (кроме использования curses или некоторых других расширенных возможностей терминала), чтобы все три были видимыми, это напечатать их в одну строку следующим образом:

sys.stdout.write("\r{} {} {}".format(a,b,c))
...