Поэтому я пытался найти ответ на этот вопрос, включая поиск в 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, если это имеет значение.
chmod 777
неправильно и небезопасно. Вам следует вернуться к нормальным разрешениям — в этом случае, я полагаю,chmod 755
будет уместно. - person tripleee   schedule 28.08.2016