2015-08-26 3 views
0

Я хотел бы написать скрипт python для использования в Windows и Linux, который очищает экран.
Большинство примеров для этого что-то вроде:Python очистить терминал без использования системных вызовов

import os 
os.system('cls') 

, который работает, но немного рискованный учитывая все вопросы, с возможностью создания системных вызовов (вопросы безопасности). Есть ли лучший способ очистки терминала в python без использования системы?
Лучшей альтернативой я нашел до сих пор было так:

print("\033c"); 

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

+0

Распечатайте несколько строк новой строки, напечатайте «\ n» * 20 –

ответ

1

Следующая ANSI escape code должно помочь в Linux (и большинство * Никс, если вы не найти действительно странный терминал):

print("\x1b[2J\x1b[H",end="") 

Это будет очистить экран и поместить курсор в левом верхнем углу. Вы можете прокручивать вверх, чтобы найти свои старые вещи, но вам, возможно, придется подняться на приличное расстояние, чтобы найти его.

У меня нет абсолютно никакой идеи, что он будет делать на окнах. Вы можете обнаружить, что вам нужно обнаружить os и использовать другой метод.

Для Python 2.x вам нужно использовать sys.stdout.write вместо print заявления, как вы не можете подавить \n на print в 2.x, насколько я знаю.

+0

, как именно я правильно его использую в 2.x? Я попробовал >>> импорт sys >>> sys.stdout.написать ("\ X1B [2J \ X1B [H", конец = "") Traceback (самый последний вызов последнего): Файл "", строка 1, в TypeError: писать() не принимает ключевое слово аргументы – BruceJohnJennerLawso

+0

@BruceJohnJennerLawso, не используйте end = "" с помощью sys, вы также можете использовать '__future__ import print_function' –

+0

@BruceJohnJennerLawso просто используйте' sys.stdout.write ("\ x1b [2J \ x1b [H") 'its только 'print', который по умолчанию торчит' '\ n'' в конце. '.write' ничего не добавляет. – or1426

0

Если у вас есть особые сведения о размере экрана, вы можете использовать измененную версию вашего исходного ответа print.

def cls(x): 
    """Clears the screen after printing x newlines.""" 
    print "\n" * x 
    print "\033c" 

В Python 3.3, а затем вы можете угадывать размер окна терминала с shutil, но я не думаю, что это отличный способ сделать это в 2,7, фактически импорта os, что вы сказали, следует избегать ,

+0

, что действительно работает, но я хотел, чтобы подсказка также была в верхней части экрана, я должен был упомянуть об этом. – BruceJohnJennerLawso

+0

Хорошо, отредактировано. Я был в шутку, но я думаю, что нет ничего смешного в 65k-пространствах –

0

Этот фрагмент кода не вызывает os непосредственно из кода.
Попробуйте это:

from subprocess import call 
def clear(int=None): 
    call('clear') 
    if int == 0: 
     exit() 
clear() 

Он работал для меня, я работаю на Linux, но я думаю, что он будет работать на окнах.

Смежные вопросы