Возможно ли (не обязательно с использованием самоанализа python) распечатать исходный код скрипта?
Я хочу выполнить короткий скрипт Python, который также распечатает его источник (чтобы я мог видеть, какие команды выполняются).
Скрипт выглядит примерно так:
command1() #command2() command3() print some_variable_that_contain_src
Реальное приложение заключается в том, что я хочу запустить скрипт из IPython с run -i magic и иметь в качестве вывода источник (т.е. выполненные команды). Таким образом я могу проверить, какие команды комментируются при каждом выполнении. Более того, при выполнении в блокноте я оставляю след того, какие команды были использованы.
Решения
. корыльский князь решение Я получаю эту однострочную строку, которую нужно поместить в начало скрипта:
with open(__file__) as f: print ‘n’.join(f.read().split(‘n’)[1:])
Это напечатает исходный код скрипта, кроме первой строки (это будет только шум). Также легко изменить нарезку, чтобы распечатать другой «фрагмент» сценария.
ДМ 2 курс, вычислимость — как написать quine — программу, которая выводит свой исходный код, и зачем
Если вы хотите вместо этого напечатать весь файл, однострочный текст упрощается до:
with open(__file__) as f: print f.read()
Источник: stackovergo.com
Задача: Программа, выводящая на экран свой исходный код (куайн)
Классическая задачка-забава по программированию: написать программу, выводящую свой исходный код на экран, не пользуясь внешними источниками данных (чтение из памяти, файла, клавиатуры). Собственно, реализация на платформе 1С v8.2
Ссылка на публикацию
Скачать файлы
ВнешняяОбработка
Специальные предложения
Комментарии
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
1. dunpil 93 27.07.11 13:43 Сейчас в теме
Не совсем понял идею обработки. Если бы она выводила свой код,было бы интересно, а там просто весь код в строку продублирован. В чем смысл?
3. cool.vlad4 2 27.07.11 14:05 Сейчас в теме
(1) для тех, кто не знает — это называется квайн
— тренировка для ума,
2. archie 28 27.07.11 13:56 Сейчас в теме
Обрати внимание, что выводимый результат должен в точности повторять исходный код.
Т.е. чтобы на экране появилось «Сообщить();» код должен выглядеть так:
Сообщить(«Сообщить();»);
А чтобы вывести «Сообщить(«Сообщить();»);» код будет таким:
Сообщить(«Сообщить(«Сообщить();»);»);
Смысл логической задачки понятен?
В любом случае, на гениальность решения никто не претендует. Это всего лишь классическая задача по программированию.
4. cool.vlad4 2 27.07.11 14:15 Сейчас в теме
(0)Да, кстати, код я к сожалению пока не смотрел, но можете добавить его в вики, как пример. Чем 1С хуже других 😉
Вопрос — ответ #4 — Как читать исходный код других программ? Зачем?
5. zling 18 28.07.11 10:09 Сейчас в теме
Неа, не катит. Во-первых, текст — не точная копия. Впрочем, в моем варианте тоже.
Во-вторых, и это-главное, если меняется текст кода в одном месте, то выводит совсем не то.
Вот, например, в первом операторе Лев поставить 10 знаков, а не 47.
В-третьих, обработка кроме вывода самого своего текста никакого смысла не имеет.
Лучше, на мой взгляд, подумать, например, над таким вариантом текста обработки:
Текст «ВЫБРАТЬ ПЕРВЫЕ 5 ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица УПОРЯДОЧИТЬ ПО ФизическиеЛица.Наименование АВТОУПОРЯДОЧИВАНИЕ»»;
|Выборка = запрос.Выполнить().Выбрать();
|Пока Выборка.Следующий() Цикл
| Сообщить(Выборка.Ссылка);
|КонецЦикла;
|
|»;
Выполнить(Текст);
Сообщить(Текст+символы.ПС+»Выполнить(Текст);»);
ну и дальше можно подумать 🙂
6. archie 28 28.07.11 10:39 Сейчас в теме
(5)
1. Даже специально скачал обработку перепроверить (вдруг недосмотрел чего), сравнил посимвольно в блокноте — отрабатывает правильно и выводит точно свой исходник. Просьба больше не пугать людей о выложенной неработающей обработке 🙂
2. Разумеется, это касается и других квайнов на других языках (см. (3)). Изменение в одном месте потребует изменения в других местах.
3. Вывод своего исходного кода и есть смысл программы. Это единственное условие задачи. Конечно, это интересная идея какую-нибудь рабочую обработку привести к условию этой задачи, но это уже выходит за рамки основного требования.
7. zling 18 28.07.11 11:15 Сейчас в теме
(6) а, ну кстати да, приношу свои извинения 🙂
потом попробую сделать, но с методом Выполнить
8. YVolohov 717 29.07.11 09:02 Сейчас в теме
Жаль 1с не позволяет программно получить тексты модулей. Это была бы замечательная возможность для написания различных парсеров. А так нужно исходники сначала выгрузить а затем проводить анализ.
9. Voland36 7 02.08.11 11:51 Сейчас в теме
задачку надо назвать не программа, а «программист, выводящий на экран свой исходный код». 😀
denis_aka_wolf; Dvornik; + 2 – Ответить
10. ildarovich 7712 02.08.11 15:15 Сейчас в теме
Вот несколько более короткий вариант (срабатывает при открытии формы)
С=»С=»»;Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)»;Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)
Ну, а если вывод инициируется нажатием кнопки на форме, то вариант будет таким
Процедура КВН(К)С=»Процедура КВН(К)С=»»;Л=Лев(С,19);П=Сред(С,19);Сообщить(Л+Л+П+П)КонецПроцедуры»;Л=Лев(С,19);П=Сред(С,19);Сообщить(Л+Л+П+П)КонецПроцедуры
Источник: infostart.org
C/С++, которая выводит свой собственный исходный код в качестве вывода
чтобы printf() мог работать.
Буквально, поскольку указанная выше программа не печатала #include , это не решение (?)
Я запутался в буквальном требовании «распечатать свой собственный исходный код» и любой цели такого рода проблем, особенно в интервью.
спросил(а) 2021-01-18T15:14:18+03:00 2 года, 5 месяцев назад
добавить комментарий
пожаловаться
Трюк здесь заключается в том, что большинство компиляторов будет компилироваться без необходимости включать stdio.h . Обычно они просто бросают предупреждение.
ответил(а) 2021-01-18T15:14:18+03:00 2 года, 5 месяцев назад
добавить комментарий
пожаловаться
Основная цель интервью с вопросами о программных программах — это, как правило, выяснить, встречались ли вы раньше. Они почти никогда не полезны ни в каком другом смысле.
Приведенный выше код может быть обновлен скромно, чтобы сделать C99-совместимую программу (согласно GCC) следующим образом:
Компиляция
/usr/bin/gcc -O3 -g -std=c99 -Wall -Wextra -Wmissing-prototypes
-Wstrict-prototypes -Wold-style-definition quine.c -o quine
Код
#include
char*s=»#include %cchar*s=%c%s%c;%cint main(void)%c»;
int main(void)
Обратите внимание, что это предполагает набор кодов, где » — это кодовая точка 34, а новая строка — это кодовая точка 10. Эта версия выводит новую строку в конце, в отличие от оригинала. Он также содержит #include , который необходим, и линии почти достаточно короткие, чтобы работать на SO без горизонтальной полосы прокрутки. С меньшими усилиями он, несомненно, мог бы быть достаточно коротким.
Test
Кислотным тестом для программы quine является:
./quine | diff quine.c —
Если есть разница между исходным кодом и выходом, будет сообщено.
Почти полезное применение методов «quine-like»
Вернувшись в дни моей юности, я произвел двуязычную «самовоспроизводящую» программу. Это была комбинация исходного кода оболочки script и Informix-4GL (I4GL). Одним из свойств, которые сделали это возможным, было то, что I4GL рассматривает < . >как комментарий, но оболочка рассматривает это как единицу перенаправления ввода-вывода. I4GL также имеет комментарии #. EOL , равно как и оболочка.
Оболочка script в верхней части файла включала данные и операции для регенерации сложной последовательности операций проверки на языке, который не поддерживает указатели. Данные, контролируемые функциями I4GL, которые мы сгенерировали и как каждый из них был сгенерирован. Затем код I4GL был скомпилирован для проверки данных, импортированных из внешнего источника данных еженедельно.
Если вы запустили файл (назовите его file0.4gl ) в качестве оболочки script и зафиксировали вывод (вызов file1.4gl ), а затем запустили file1.4gl в качестве оболочки script и зафиксировали вывод в file2.4gl , два файла file1.4gl и file2.4gl будут идентичны. Тем не менее, file0.4gl может отсутствовать весь сгенерированный код I4GL и до тех пор, пока оболочка script ‘comment’ в верхней части файла не будет повреждена, она восстановит самовоспроизводящийся файл.
Источник: progi.pro