Что это за кодировка, я не силен, но, наверное, Windows)) В самой командной строке шрифт русский, все нормально. Но скрипт с луа на выходе кириллицу не дает. Как перекодировать и получить кириллицу?
Пользователь
Сообщений: Регистрация: 30.01.2015
02.06.2015 17:06:44
Взять нотепад и Save As
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 17:29:05
я имею в виду в скрипте, чтобы в лог его кинуть в нормальном виде
Пользователь
Сообщений: Регистрация: 01.02.2015
02.06.2015 18:18:00
сохранить не в UTF-8 w/o BOM, а просто в ANSI
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 18:26:18
Что значит сохранить? Я не вполне понимаю. Скрипт пингует айпишник. Получает строку с вышеуказанным содержимым. Я хочу с этой строки взять нужные данные (полбеды, решаемо) но и хочу её в нормальной кодировке, в которой луа и выдает строки в файл и в дебугвью, выдать в лог. А получаются - кроказябры. Посреди нормально читаемого лога вот эта хрень. Отсюда и вопрос, как перекодировать строку и выдать её в читаемом виде?
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 18:35:19
Вот сама функция, взята из примера, на который навел Сергей Горохов
Код
function backticks_table(cmd)
local tab = {}
local pipe = assert(io.popen(cmd),
"backticks_table(" .. cmd .. ") failed.")
local line = pipe:read("*line")
while line do
table.insert(tab, line)
line = pipe:read("*line")
end
return tab
end
for k, v in ipairs(backticks_table("ping google.com"), k) do
print(v)
end
она и пингует
Пользователь
Сообщений: Регистрация: 30.01.2015
02.06.2015 18:49:53
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 19:29:02
Михаил, спасибо за наводку, но у меня не работает пример. Ругается на bit32. Судя по всему надо подключать какие то библиотеки, в луа 5.3 она уже включена, но как его доустановить - понять не могу да и будет ли это работать в квике - не знаю. У меня стоит 5.1, ставил вроде без танцев с бубном. Скажите, эту библиотеку можно отдельно подключить? как это сделать, если она уже в составе сборки? Для меня работа с библиотеками - темный лес, ничего не понимаю(( Может, есть другой способ решения моей задачи?
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 19:38:47
Скрипт библиотеки нашел, скопировал, но не работает. Разобраться сам не могу. Кто-нибудь еще знает способы перекодировки? Был бы признателен за, может, более явную наводку.
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 20:22:35
Пошел другим путем. Если в командной строке перед пингом ввести chcp 861, то сообщения пойдут на англицком. Если потом chcp 866, вернется кодировка русская. Вопрос, как в указанном выше скрипте добавить исполнение chcp 861? Чтоб не новая "сессия" командной строки начиналась, а в составе той, что с пингом?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
02.06.2015 21:09:33
Код
io.popen('chcp 1251 && ping www.quik.ru')
Но это не помогает
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 21:19:13
надо 861. Не понял что значит &&? пока вставляю не работает, может, синтаксис не понимаю
Viktor MMM пишет: Чтоб не новая "сессия" командной строки начиналась, а в составе той, что с пингом
Выполните в командной строке - поймёте.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 04.03.2015
02.06.2015 21:50:54
Понял, спасибо. Да, не пашет(
Пользователь
Сообщений: Регистрация: 31.01.2015
03.06.2015 01:43:00
Цитата
Viktor MMM пишет: Вопрос, как в указанном выше скрипте добавить исполнение chcp 861? Чтоб не новая "сессия" командной строки начиналась, а в составе той, что с пингом?
Собственно, а зачем Вам перекодировка ради одного единственного результата команды ping? Цифровые значения Вы выдернуть можете, а весь остальной текст там является константой. Просто произведите замену текста на читаемый и все.
Пользователь
Сообщений: Регистрация: 04.03.2015
03.06.2015 14:35:24
Да это понятно, что в данном случае можно и так обойтись. Но я хочу сделать по-человечески. Сообщения могут отличаться. И гадать что там не хочу. Уже почти нашел решение, упускаю перекодировку, перевожу на английский - устроит вполне. Дело осталось за запуском двух команд в одной сессии командной строки. Если подскажете как это сделать, буду признателен.
Что интересно, с dir можно и на русском, а ping на русском не получается.
Viktor MMM , с вас - парсер результатов вывода. А то мне лень самому делать.
Отлично! Спасибо большое! Не догадался бы так сделать. То, что не пишет на русском, я не расстраиваюсь. Подойдет и английский. Читал на просторах, что луа под кириллицу плохо заточен, так что дальше в этом направлении и копать не буду. Результат читабельный, можно смело кидать в лог, вытаскивать нужные данные, проверять - в сервере дело или в инете.
Что за парсер вас интересует? В смысле, вытащить отдельно % потерь или еще чего? Скажите, сделаю.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.06.2015 23:16:27
Цитата
Viktor MMM пишет: Что за парсер вас интересует? В смысле, вытащить отдельно % потерь или еще чего? Скажите, сделаю.
Напишите кусок кода, который у вас получится, который сохраняет результат в лог. А то самому в лом писать. ;-)
Надо делать так, как надо. А как не надо - делать не надо.
Michael Bulychev
Гость
04.06.2015 05:49:29
Добрый день. Есть более удобные утилиты дл этих целей. Например вот эта -
Код
function os.ping(host)
local f = assert(io.popen('Fping.exe ' ..host .. ' -o', 'r'))
local s = assert(f:read('*a'))
f:close()
return s:sub(s:find('Minimum ='), #s)
end
print(os.ping('localhost'))