Domka
Ну он требует от меня моими словами
кота
🤔
Domka
Я бы сделал, но он заподозрит и поймет что я читер
Snusmumriken
А теперь давай по-человечески.
os.execute выполняет системную команду. По названию можно понять.
Если в этой системной команде есть запуск другой программы — то это запуск другой программы, подсоединение к её выводу и считывание того что программа напишет в stdout.
io.popen это буквально то же самое, только вместо ожидания пока программа будет делать штуки, мы получаем ФАЙЛ вывода той программы, и можем его считывать вплоть до eof.
Domka
И пол чата опять будут говорить, жулик не воруй
Domka
кота
Вас допрашивает снус? Просто скажите "Нет!"
Снус не может спрашивать за ваш говнокод без вашего на то разрешения (Ст. №29 конституции РФ)
Domka
Domka
Я понял чо делает функция, когда загуглил ее, приписав lua, и открыл сайт там ПЕРЕВЕЛ страницу, и прочитал
Domka
Но мне хватило прочитать того что эта функция пишет чото в командную строку, я тогда даже не задумывался о выходном значении. Потому на радостях как дебик пошел пилить свой говна код
Snusmumriken
Поэтому у тебя и проблемы, ты не задумываешься.
Domka
Дап
кота
Нихуя ты душишь снус
Domka
Я все делаю отрывками отрывков, которые в свою очередь являються отрывками еще мелких отрывков, в там еще короче больше мелких отрывков, и вот ты уже в фрактале из отрывков...
Domka
Так и живу
Domka
Так же с бизнес планом который недавно написал
Domka
Так ваще со всей жизнью
Snusmumriken
Отрывки отрывкам рознь. Я тоже изучаю отрывками, вопрос достаточности.
Domka
Харашо
Snusmumriken
И кстати, почему я использовал тут именно popen?
https://pastebin.com/dajVyip2
Snusmumriken
Хотя вроде бы ничего не предвещает беды и можно фигачить execute.
Domka
Snusmumriken
local handle = io.popen(command, "rb")
Popen можно открыть в бинарном виде. Он не делает препроцессинга, он позволяет делать запросы за бинарными данными.
Domka
Щас загуглю
Domka
И скажу ответ
Snusmumriken
Чел.
Domka
Snusmumriken
Что?
Snusmumriken
Как компилируя?
Snusmumriken
Открой картинку в текстовом редакторе, покажи что ты там увидишь?
Domka
Ну типо препроцессинг же это компиляция?
Snusmumriken
Нет.
Snusmumriken
Что такое препроцессинг?
Domka
Незнаю
Domka
:^/
Snusmumriken
Можно литературно перевести и получить довольно точный ответ.
Domka
Название широко распространенного скриптового языка программирования PHP является рекурсивным акронимом 'Php: Hypertext Preprocessor'. В некоторых языках программирования этап компиляции и трансляции получили название 'препроцессинга'.
Snusmumriken
Domka
Snusmumriken
Препроцессор это всё что угодно занимающееся предварительным преобразованием.
В качестве тупейшего примера, сколько разных символов перевода строки ты знаешь?
Snusmumriken
Пущай Домка отвечает ))
Domka
Domka
Это не символы да..
Snusmumriken
Гениально. Нет. Символы перевода строки.
Domka
Перевода... всмысле перенос каретки все такое?
Snusmumriken
Смотри, я пишу текст.
Эта строка находится на этой строчке.
А эта — на следующей.
Snusmumriken
Да.
Domka
/n
Domka
Ну я им только пользуюсь
Snusmumriken
\n, и это только один из символов. И ты им пользуешься потому что не знаешь второго.
Domka
А так документацию по ним открываю и чекаю
Snusmumriken
Какой второй?
Snusmumriken
Это ещё что?
Domka
\d
Domka
Ну я мельком чото видел, и там знак процента стоял
Snusmumriken
Лол, нет.
Domka
Видимо это чото экслюзивное для tic80
Snusmumriken
\r — carriage return, символ возврата каретки. На принтерах или печатных машинках — буквально означает дёрганье рычага каретки чтобы вернуть курсор в начало той же строки.
\n — newline, новая строка. Он же — проворот барабана на печатной машинке.
Snusmumriken
В одних ОС, в качестве дефолта используется \r. В других — \n. В третьих (механически более правильное) — \r\n, что буквально означает "дёрнуть рычаг и провернуть барабан", то что делали тётки-машинистки на печатных машинках.
Domka
Жестка
Snusmumriken
К чему это всё.
Domka
Хотел спросить как это связанно с препроцессингом
Snusmumriken
Текстовый препроцессор ввода может фильтровать символы. Ты пытаешься получить от другой программы бинарную картинку, а текстовый препроцессор (в режиме которого открыт файл общения с курлом) — удаляет все непечатные символы. Это например.
Snusmumriken
В текстовом режиме открытия файла, опять таки, символы перевода строки в открытом файле могут быть зависимыми от системы, потому что препроцессор будет их к чему-то приводить — к \r, к \n, к \r\n или чему-то ещё. В бинарном — там будет ровно то что есть в файле, ни больше ни меньше.
Snusmumriken
Сами символы \r\n это если что последовательности байт, их так обозначают потому что их нельзя напечатать. Это байтовые \012 и \015. Буквенные обозначения для простоты. Есть куча непечатных символов, и их текстовые препроцессоры могут фильтровать. Бинарные данные же неизменны.
Domka
Snusmumriken
io.popen МОЖЕТ возвращать взад неизменные и неиспорченные препроцессором бинарные данные. Можно качать картиночки, музычку, документики и прочую ерунду, не являющуюся простым текстом (состоящим только из печатных символов).
Domka
Ладн частично понял
Domka
А os.execute типо возвращает испорченные данные?
Snusmumriken
Если ты будешь пытаться гонять через него бинарщину — да.
Snusmumriken
Если ты попытаешься скочать курлом картинку через os.execute — ты её не скачаешь, там будет мусор вместо картинки.
Domka
Харашо, тоесть если мне надо будет скачать что то типо text я буду использовать execute, а если что то побинарнее обычных прописей, то popen
Snusmumriken
Ммм, в идеале — всегда popen. Execute может много чего попортить, например некоторые кодировки.
Domka
Ладн
Domka
Тогда вопрос
Snusmumriken
Почему он существует, раз портит?
Domka
И это тоже
Snusmumriken
Потому что айти придумано американцами.
Snusmumriken
И потому что это было довольно давно.