2017-01-21 3 views
2

У вас есть функция lua, которая эмулирует завершение выполнения в% записи до stdout.Как очистить линию stdout в Lua?

function progress(completed) 
    io.write(completed.."\r") 
    io.flush() 
end 

progress("1% completed"); progress("50% completed") 

Выход буду

% завершено

Часть текста исчезла. В питона в аналогичной ситуации я бы, вероятно, очистить линию перед записью stdout следующим образом:

sys.stdout.write(' ' * 50 + '\r') 
sys.stdout.write(text + '\r') 
sys.stdout.flush() 

Как очистить stdout строку в Lua?

Я бы сделал следующее, но есть ли лучший или более стандартный способ?

function iop(str) 
    io.write(string.format("%050s\r", ' ')) 
    io.write(str) 
    io.flush() 
end 
+2

Первый скрипт, который вы дали работает по назначению в Lua 5.3.3. Проблема начнется, если вторая строка будет короче. – Green

ответ

1
local last_str = '' 

function iop(str) 
    io.write(('\b \b'):rep(#last_str)) -- erase old line 
    io.write(str)      -- write new line 
    io.flush() 
    last_str = str 
end 

Теперь давайте проверим это:

function wait(msec) 
    local t = os.clock() 
    repeat 
    until os.clock() > t + msec * 1e-3 
end 

iop('Very very very long string') 
wait(500) 
for i = 0, 100 do 
    iop(i..'% completed') 
    wait(20) -- wait 20 ms 
end 
print'\nDone' 

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

  • Нет связанных вопросов^_^