Python 3.6 на linux: проблема с сбросом того, что я хочу записать на стандартный вывод - PullRequest
0 голосов
/ 02 февраля 2020

Я довольно новичок в python и linux, и у меня возникла проблема ...

Итак, я пытаюсь запустить следующий код (Предполагается, сообщить человеку перед терминалом, что программа все еще работает, а затем удалить эту строку через 1 секунду) :

import sys

while True:
   # do something

   sys.stdout.write("Still going...")
   time.sleep(1)
   sys.stdout.write("\r")
   sys.stdout.flush()

Это прекрасно работает на windows на python 3.8, но когда я запускаю его на своем linux vps с python 3.6.9 с помощью команды "python3", он не вызывает sh "\ r", поэтому "Все еще идет ..." "строка только удаляется и сразу же перепечатывается, когда в следующий раз достигает sys.stdout.write (" Все еще идет ... ").

Если у кого-то есть идея, что здесь происходит - скажите, пожалуйста, любая помощь оценили!

1 Ответ

1 голос
/ 02 февраля 2020

Windows, Ma c OS и UNIXes кодируют новые строки с разными символами.

  • Windows использует \r\n
  • Ma c ОС использует \r
  • UNIX используют \n

, если вы хотите, чтобы ваша программа была кроссплатформенной, вы должны использовать os.linesep вместо OS- определите c перевод строки


, отвечая на комментарий:

На самом деле Windows, \r просто возвращаются в начале строки, в то время как \n фактически начинает новую строку (хорошее объяснение см. в этом StackExchange и ).

Я предполагаю, что на windows он позволяет вам просто писать в одной строке до выхода из программы.

К сожалению, он может работать, по крайней мере, с некоторыми терминалами в UNIX, но не обязательно на всех терминалах ...

В качестве обходного пути вы, вероятно, могли бы использовать символ \b, который удаляет последний символ из линия, как клавиша [backspace].

...