Невозможно перезаписать строку в Python 3.5 для OSX

Поэтому я пытался найти ответ на этот вопрос, включая поиск в StackOverflow, и все решения, которые я нашел до сих пор, не сработали.

Немного предыстории: мой код читает файл и делает что-то с каждым словом. Сам код работает, я просто пытаюсь отформатировать вывод. В частности, мое намерение состоит в том, что когда я запускаю скрипт, он должен печатать одну строку «Текущее слово: [x]», где [x] — слово, обрабатываемое в данный момент. Он должен перезаписывать себя снова и снова, чтобы отображать каждое слово в одной и той же строке, а не печатать каждую строку отдельно. По сути, это должен быть текстовый индикатор выполнения.

Я знаю о \r, возврате каретки и о том, что он должен отправить курсор обратно в начало строки. На данный момент я не могу использовать любую комбинацию вызовов print() или sys.stdout.write(), чтобы избежать новой строки, независимо от того, что я пытаюсь:

1, согласно https://stackoverflow.com/a/20980840/6767203:

print("\rCurrent Word: " + currentWord, end="")

2:

print("Current Word: " + currentWord, end="\r")

3, потому что я подумал, что может помочь все, что содержится в одной строке (и это был формат этого ответа):

print("\rCurrent Word: {0}".format(currentWord), end="")

4, согласно https://stackoverflow.com/a/11018255/6767203:

import sys
[...]
sys.stdout.write("\rCurrent Word: {0}".format(currentWord))
sys.stdout.flush() #tried with and without this

5, согласно https://stackoverflow.com/a/11076668/6767203:

import sys, os
[...]
sys.stdout = os.fdopen(sys.stdout.fileno(), "w", newline=None)
[...]
print("\rCurrent Word: {0}".format(currentWord))
# tried all the previous print()s and sys.stdout.write()s, too

Ни один из них не приводит к ошибкам, но ни один из них не удаляет новую строку, в результате чего на экран выводится большая стопка строк. (Я думаю, что некоторые из них могут привести к двум строкам; я пробовал много вещей и забыл точные результаты каждого варианта.)

Я немного поиграл, и

sys.stdout.write("Current \rWord: {0}".format(currentWord))

действительно сдвигает курсор влево, как и ожидалось, что приводит к "Word: [x]" (и время от времени какой-то бесполезности) - он просто также печатает новую строку.

Я пишу скрипт в «script.py», а затем в окне терминала

chmod 777 script.py
./script.py

с

#!/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5

наверху. Я также использую Mac OS X 10.9.5, если это имеет значение.


person Glire    schedule 28.08.2016    source источник
comment
Есть ли шанс, что в самом currentWord есть новая строка? Вы можете напечатать (repr (currentWord)) чтобы узнать. Или «утвердить \r не в currentWord» в вашем обычном коде. Это может произойти, если вы не удалите строки из файла перед обработкой.   -  person tdelaney    schedule 28.08.2016
comment
Можете ли вы предоставить минимально воспроизводимый пример, демонстрирующий проблему?   -  person Martin Tournoij    schedule 28.08.2016
comment
Что бы вы ни делали, chmod 777 неправильно и небезопасно. Вам следует вернуться к нормальным разрешениям — в этом случае, я полагаю, chmod 755 будет уместно.   -  person tripleee    schedule 28.08.2016
comment
@delaney Боже мой, вот и все. У меня был код для удаления новых строк из слов, но я случайно поставил перед ним функцию print(). Вот оно.   -  person Glire    schedule 29.08.2016
comment
@tripleee Также, спасибо. Я сделал это.   -  person Glire    schedule 29.08.2016