Добавляет ли popen () перевод строки (\ n) в конце результата? - PullRequest
0 голосов
/ 05 сентября 2011

Я написал небольшую функцию, которая возвращает результат выполнения команды.

function axsh(cmd)
    local fullCmd=cmd:lower()
    local f,err=io.popen(fullCmd,"r")
    if not f then
        return nil,"Could not create the process '"..fullCmd.."' \nError:"..err
    end
    return f:read("*all")
end

s=axsh("echo hi")
--print all bytes
print(s:byte(1,s:len()))

Вывод всегда имеет \ n в конце, независимо от того, какая команда:

104 105 10

Редактировать: это происходит не только для моего собственного двоичного приложения командной строки, но и почти для всех команд ОС: Windows: "dir", "ipconfig", "echo" ... Linux: "ls","pwd", "ls" ...

Но когда я запускаю команду отдельно (т. е. в командной строке Windows), перевод строки не заканчивается.Мне это не нужно, поэтому нужно удалить последний символ перед возвратом результата.

Вопрос: всегда ли этот перевод строки присутствует в результате popen ()?Я не могу найти ссылки на это поведение в документации.

1 Ответ

2 голосов
/ 05 сентября 2011

Нет.io.popen просто возвращает любую строку, созданную командой.В качестве команды вы используете echo, в результате чего после строки ставится символ новой строки (именно поэтому командная строка появляется на следующей строке, а не сразу после вывода).используя попытку:

s=axsh([[lua -e "io.write([=[hi]=])"]])
return string.byte(s,1,-1)

, которая не заканчивает вывод новой строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...