2013-11-30 5 views
4

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

Теперь моя проблема - функция сна не работает должным образом. Он печатает целые предложения после долгой задержки.

import sys 
from time import sleep 

words = "This is just a test :P" 
for char in words: 
    sleep(0.5) 
    sys.stdout.write(char) 

Я использую «sys.stdout.write» для удаления пробелов между символами.

ответ

4

вы должны использовать sys.stdout.flush() после каждой итерации

Проблема в том, что стандартный вывод сбрасывается с новой строки или вручную с sys.stdout.flush()

Таким образом, результат

import sys 
from time import sleep 

words = "This is just a test :P" 
for char in words: 
    sleep(0.5) 
    sys.stdout.write(char) 
    sys.stdout.flush() 

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

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

import sys 
from time import sleep 

words = "This is just a test :P" 
for char in words: 
    sleep(0.5) 
    sys.stderr.write(char) 
2

Вы должны очистить стандартный вывод в каждом цикле, чтобы очистить буфер:

import sys 

from time import sleep 

words = "This is just a test :P\n" 
for char in words: 
    sleep(0.5) 
    sys.stdout.write(char) 
    sys.stdout.flush() 

Без этого он просто хранить вашу строку в буфер и ждать \n (или достаточного количества символы для печати), которые приходят в конце вашего цикла ....

Подробнее:

0
import sys 
from time import sleep 

words = "Welcome to CB#SA.NET.CO" 
for char in words: 
sleep(0.1) 
sys.stdout.write(char) 
sys.stdout.flush() 
0

В питон 3, вы можете заменить вызовы sys.stdout со стандартными print звонков:

for char in words: 
    sleep(0.1) 
    print(char, end='', flush=True) 
Смежные вопросы