Очистить консоль python в PyCharm
Пишу простой алгоритм reinforcement learning, в котором есть простенькая анимация, посредствам вывода в консоль. Так вот, чтобы показать новый кадр анимации, мне надо как-то эту консоль очистить. Сейчас использую print(100*’\n’) , но это выглядит не очень красиво из-за прокрутки консоли. Использую PyCharm IDE, если это важно. Пробовал os.system(‘cls’) и print(‘\k’) — не работает. Можно ли как-то очищать консоль, чтобы заново выводить в нее новый кадр анимации? P.S. Стоит добавить: кадр — квадратная матрица размера n, каждый элемент которой — отдельный символ: =, если клетка пустая, А — если в клетке агент, Е — если в клетке враг. Матрица обновляется и выводится новый кадр. Сейчас n=7. Общее количество кадров заранее не может быть известно.
Отслеживать
47.9k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 6 мая 2020 в 18:09
518 1 1 золотой знак 4 4 серебряных знака 15 15 бронзовых знаков
Python-сообщество
- Начало
- » Python для новичков
- » Очистить консоль
#1 Ноя. 16, 2009 16:19:27
dreamcode От: Зарегистрирован: 2009-11-16 Сообщения: 7 Репутация: 0 Профиль Отправить e-mail
Очистить консоль
Вот весь скрипт. OS -Linux MAndriva
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os,sys
def clearConsol():
if sys.platform==’win32′:
os.system(‘cls’)
else:
os.system(‘clear’)
clearConsol()
#2 Ноя. 16, 2009 18:03:50
sypper-pit От: Ulan-Ude(msk) Зарегистрирован: 2009-01-30 Сообщения: 1102 Репутация: 6 Профиль Отправить e-mail
Очистить консоль
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys
def clearConsol():
if sys.platform=='win32': os.system('cls')
else:
os.system('clear')
clearConsol()
думаю так надо, у меня на фряшке и на винде, нормально отработало. Какой у тебя питон ?
Отредактировано (Ноя. 16, 2009 18:10:35)
#3 Ноя. 16, 2009 19:34:40
dreamcode От: Зарегистрирован: 2009-11-16 Сообщения: 7 Репутация: 0 Профиль Отправить e-mail
Очистить консоль
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys
def clearConsol():
if sys.platform=='win32': os.system('cls')
else:
os.system('clear')
clearConsol()
думаю так надо, у меня на фряшке и на винде, нормально отработало. Какой у тебя питон ?
#4 Ноя. 16, 2009 21:44:02
dreamcode От: Зарегистрирован: 2009-11-16 Сообщения: 7 Репутация: 0 Профиль Отправить e-mail
Очистить консоль
Всё решил проблему… всем спасибо .
#5 Ноя. 28, 2016 03:51:54
Schlange Зарегистрирован: 2016-11-28 Сообщения: 38 Репутация: 1 Профиль Отправить e-mail
Очистить консоль
Скажите пожалуйста, а почему такая банальная команда требует столько строк с подключением библиотек и проверки оси?
Например print есть, а встроенного clear нет. Почему так?
ubuntu 14.04 / manjaro 16.10
#6 Ноя. 28, 2016 04:09:21
py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9639 Репутация: 839 Профиль Отправить e-mail
Очистить консоль
Schlange
Например print есть, а встроенного clear нет.
У меня есть встроенный clear(), только, как показала практика, он нафиг не нужен никогда.
[guest@localhost ~]$ cat /usr/lib/python3.3/site-packages/my.py
# -*- encoding: utf-8 -*-
import os
def clear():
os.system("clear")
[guest@localhost ~]$
[guest@localhost ~]$ cat .pythonrc.py
try:
from my import clear
except ImportError:
pass
[guest@localhost ~]$
Schlange
Почему так?
Я, вообще, чищу экран, но делаю это через комбинацию Ctrl + c + c в Emacs’е, которую сам же и привязал к своей же функции очистки на базе встроенной функции.
(defun clear-buffer()
"Clear current buffer."
(interactive)
(erase-buffer)
(message "Buffer cleared"))
~/.emacs.d/init-key-bindings.el
(global-set-key (kbd "C-c c") 'clear-buffer)
Так что это как с инопланетянами: почему они не отвечают на наши радиосигналы? Да потому что этот вид связи (радио) для них выглядит таким же примитивным, как для нас выглядит дым от костра, которым папуасы пытаются с нами связаться, сидя у себя на острове в лесу. Мы даже если заметим их, нам просто неинтересно с ними связываться.
Как только поднимешься выше, тебе просто не нужно будет многое, что нужно сейчас. А всё что будет нужно, ты сделаешь себе сам, потому что это элементарно.
Отредактировано py.user.next (Ноя. 28, 2016 04:28:19)
Безмодульный скролл в консоли и правильная очистка строк.
Как в питоне реализовать скролл в терминале без подключения 49124128 модулей?
Допустим мне надо ограничить вывод 50 строками остальное уходит в скролл.
И как делать правильно очистку всего терминала или определенной строки?
Сейчас я делаю это очень топорно:
__import__(‘os’).system(«reset»)
Это занимает порядка 0.3 секунд и вообще это неправильно. Я уверен.
VictimOfLoveToLinux ★
19.04.12 19:52:17 MSK
С задержкой/очисткой разобрался.
import os print "привет мир" os.system('clear') print "пока мир"
Всё не могу привыкнуть к import.
Вопрос о скролле всё ещё актуален.
VictimOfLoveToLinux ★
( 19.04.12 21:14:17 MSK ) автор топика
Мне кажется, имеет смысл использовать ncurses
kostik1
( 19.04.12 21:20:06 MSK )
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 21:14:17 MSK
занимаешься какой-то херней. лучше разберись с терминалом, управляющими последовательностями и всем таким. это же тебе не дос с паскалебейсиком.
на вот тебе, читай:
а лучше возьми либу какую-нибудь типа ncurses или slang
anonymous
( 19.04.12 21:24:21 MSK )
Ответ на: комментарий от anonymous 19.04.12 21:24:21 MSK
Почему херней?
Есть 2 скрина внутри одного терминала. Естественно им двум нужен разный скролл тк я не использую gtk etc.
VictimOfLoveToLinux ★
( 19.04.12 21:33:26 MSK ) автор топика
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 21:33:26 MSK
потому что вызываешь системную команду из питона вместо того, чтобы использовать какую-нибудь библиотеку для работы с терминалом. а еще ты пишешь очень странные конструкции типа __import(‘os’)__.system(‘clear’), вместо того, чтобы разобраться с языком и модулями.
anonymous
( 19.04.12 21:39:13 MSK )
Ответ на: комментарий от anonymous 19.04.12 21:39:13 MSK
Основные модули скудны а посторонние не хочу.
VictimOfLoveToLinux ★
( 19.04.12 21:44:23 MSK ) автор топика
Ответ на: комментарий от anonymous 19.04.12 21:39:13 MSK
Нормальная конструкция :з если надо всего один раз использовать os то она идеальна.
VictimOfLoveToLinux ★
( 19.04.12 21:45:04 MSK ) автор топика
Ответ на: комментарий от anonymous 19.04.12 21:39:13 MSK
вот тебе пример:
#!/usr/bin/python import sys def clear(): sys.stdout.write('\033[1J') sys.stdout.write('\033[;H') print 'hello' clear() print 'world'
и читай про управляющие последовательности терминала
anonymous
( 19.04.12 21:45:16 MSK )
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 21:45:04 MSK
если один раз, то нормально, но ты же не этого хочешь.
anonymous
( 19.04.12 21:46:27 MSK )
Ответ на: комментарий от anonymous 19.04.12 21:46:27 MSK
Ты ещё не видел как я запилил разделение экрана терминала для одновременной работы в нем двух скриптов :з.
VictimOfLoveToLinux ★
( 19.04.12 21:49:49 MSK ) автор топика
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 21:49:49 MSK
вот тебе еще код:
#!/usr/bin/python import sys import time def scrollpart(f, t): sys.stdout.write('\033[%s;%sr' % (f, t)) scrollpart(1, 10) for i in xrange(100): print i time.sleep(0.1)
anonymous
( 19.04.12 21:55:29 MSK )
Тебе нужен ncurses.
schizoid ★★★
( 19.04.12 22:01:12 MSK )
Ответ на: комментарий от schizoid 19.04.12 22:01:12 MSK
Матерь божья! Тонны моего кода на свалку.
VictimOfLoveToLinux ★
( 19.04.12 22:07:33 MSK ) автор топика
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 22:07:33 MSK
Добро пожаловать в реальный мир.
В следующий раз, прежде чем лепить лисапет (сколь заманчивым не казалось), ищи уже готовые библиотеки.
BTW, на будущее: пиши код так, чтоб его приходилось минимально переделывать при подобных изменениях в отдельных частях.
schizoid ★★★
( 19.04.12 22:56:58 MSK )
Ответ на: комментарий от schizoid 19.04.12 22:56:58 MSK
Я или гуглить не умею или в сети реально мало годных описаний для модулей питона.
Казалось бы нагуглить модуль который делит экран на две части гиппер просто.
Но нет. Я 3ое суток гуглил и без результата.
Немного потыкал Urwid. Тоже годнота.
VictimOfLoveToLinux ★
( 19.04.12 23:00:12 MSK ) автор топика
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 23:00:12 MSK
HATE
schizoid ★★★
( 19.04.12 23:02:56 MSK )
Ответ на: HATE от schizoid 19.04.12 23:02:56 MSK
Ну без конкретики. Заголовок вообще ни разу не намекает. «Что-то там где-то там работа с чем-то там»
У питона вообще самый плохой FAQ который я когда-либо читал.
Самый годный у PHP. После каждого описания есть годный explame с комментариями.
А чтобы осилить питон мне приходится изучать всю такую страницу с информацией которая мне мало необходима на данный момент.
VictimOfLoveToLinux ★
( 19.04.12 23:07:45 MSK ) автор топика
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 23:07:45 MSK
Это дока, а не обучалка. Предполагается, что читатель уже ознакомился с NCURSES programming howto.
Тебе всё равно придётся рано или поздно ознакамливаться с такими простынями. IMHO, лучше это делать на домашних проектах, чем на рабочих на производстве, где жмут сроки, или на каких-то абстрактных, высосанных из пальцев примерах.
schizoid ★★★
( 19.04.12 23:33:40 MSK )
Ответ на: комментарий от VictimOfLoveToLinux 19.04.12 21:45:04 MSK
Нормальная конструкция :з если надо всего один раз использовать os то она идеальна.
Она предельно бредова. Модуль os по любому грузится и висит в памяти, переменная os все равно как правило содержит именно этот модуль, а синтаксис у такой конструкции просто ужасен.
Основные модули скудны а посторонние не хочу.
Про основные модули во первых смешно, во вторых неправда;-)
Как очищать консоль?
Пытался реализовать секундомер в консоли, но не нашел способа, как очищать консоль, при новой выдаче. Суть в том, что нужно чтобы значения обновлялись, а не выводились каждый раз на новую строку. Сам код:
import time, os seconds,minutes,hours = 0,0,0 while True: time.sleep(1) if seconds == 60: seconds = 0 minutes+=1 if minutes == 60: minutes = 0 hours+=1 if hours > 0: print(f" : : : ") elif minutes > 0: print(f" : : ") else: print(f" : ",sep='',end='\r') os.system('cls||clear') seconds+=1
Пишу на Windows, VSCode.
Отслеживать
6,497 2 2 золотых знака 8 8 серебряных знаков 23 23 бронзовых знака