Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 28.11.2019
Сообщений: 20

Как запустить код из файла и вывести то что вывел компилятор?

19.10.2020, 21:25. Показов 7566. Ответов 15

Студворк — интернет-сервис помощи студентам
Есть текстовый файл с каким-либо кодом:
Python
1
2
3
4
code.txt:
a = int(input())
x = int(input())
print(a + x)
Как исполнить этот код в функции через другой код? Как вывести то что выведет компилятор?
Python
1
2
3
4
def code(a, x):
    with open("code.txt", "r", uncoding = "utf-8") as file:
        # исполнение кода в файле с использованием переменных введенных в функции
    print(#то что выводит компилятор в другом коде)
Пример выполнения

Python
1
2
3
4
# запуск кода с функцией
code(2, 2)
# выполняется код в файле и выводит то что вышло
4
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2020, 21:25
Ответы с готовыми решениями:

как сделать что-бы код в массиве вывел одинаковые числа?
Помогите по C++,Нужо что-бы числа которые ты повторно ввел в массиве отобразились на екран!! Например : 1 3 4 2 4 5 Вывод : 4 5 ...

Не могу запустить код на Mac OS. Что за ошибка? Как её исправить?
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <conio.h> #include <algorithm> //используется для min-Return the...

Как запустить код или что он должен выдать в результате работы?
Скажите пожалуйста, как запустить код или что он должен выдать в результате работы?# SECTION text # global main main: inc ...

15
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
19.10.2020, 21:41
Python
1
2
file = open('input.txt','r')
exec(file.read())
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.10.2020, 08:21
Fury67, не прокатит, надо ещё ввод-вывод перехватывать.

Добавлено через 2 минуты
Можно ли прочесть stdout в python?
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
20.10.2020, 13:01
Цитата Сообщение от Fury67 Посмотреть сообщение
exec(file.read())
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
ввод-вывод перехватывать.
Сдаётся мне, не надо ничего перехватывать и динамически загружать. Ему просто нужен import.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.10.2020, 13:18
dondublon, не. Нужно превратить аргументы в строки. Как вариант, такой костыль для stdin прикольно роботает

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
text = '''\
a = int(input())
x = int(input())
print(a + x)'''
 
def code(*args):
    ccc = compile(text, 'code.txt', 'exec')
    ls = list(args)
    def iii():
        return str(ls.pop(0))
    exec(ccc, {}, {'input': iii})
    
code(2, 2)
Добавлено через 40 секунд
Даже ошибки прикольные пишет
Code
1
2
3
4
  File "code.txt", line 2
    x = int(input())t
                    ^
SyntaxError: invalid syntax
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
20.10.2020, 13:28
Когда я вижу такую формулировку:
Цитата Сообщение от TonyPY Посмотреть сообщение
Как исполнить этот код в функции через другой код?
то понимаю, что человек не в курсе даже про import. Но давайте спросим.
TonyPY, any comments?

А вот такое:
Цитата Сообщение от TonyPY Посмотреть сообщение
Как вывести то что выведет компилятор?
указывает, что человек, вероятно, не знает про return, а знает только про print. На что намекает и последующая функция.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.10.2020, 13:36
Цитата Сообщение от dondublon Посмотреть сообщение
человек не в курсе даже про import.
Импорт не будет работать для файлов с расширением отличным от py. Наверное.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
20.10.2020, 13:53
Рыжий Лис, не будет, но ТС наверняка в это ещё не упёрся.

Если файл по содержимому является корректным питоновским модулем, лучше воспользоваться динамическим импортом. Это всё-таки будет построже, чем чтение текста + eval.
0
0 / 0 / 0
Регистрация: 28.11.2019
Сообщений: 20
21.10.2020, 00:11  [ТС]
donddublon, про return и import знаю, но как их мне использовать для того что написано в вопросе? Я не знаю как выполнить один код через другой с сохранением итога, неважно какая функция в файле
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.10.2020, 00:50
в файл с кодом пихаешь ретурн:

Python
1
2
3
4
def code():
    a = int(input())
    x = int(input())
    return a, x
в целевой файл кидаешь импорт:

Python
1
2
import code
print(code.code())
и все дела.

Добавлено через 17 минут
Добавлю, расширение файла для импорта должно быть .py (как написали выше).
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.10.2020, 00:52
Цитата Сообщение от TonyPY Посмотреть сообщение
Я не знаю как выполнить один код через другой
А зачем тебе код в текстовом файле? Тебе дали такое задание или ты сам его себе придумал?
Код должен содержаться в .py файле, а не txt. Тогда его выполнение это просто import без всяких попыток имитировать компилятор и что-то перехватывать.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
21.10.2020, 09:33
TonyPY, см. рецепт Кулхацкера. Главное - использовать функции в импортируемом коде.
Только один нюанс - не надо называть свой модуль code, такой модуль уже есть, это bad style.
1
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.10.2020, 14:49
Лучший ответ Сообщение было отмечено TonyPY как решение

Решение

Ради интереса написал также вариант с перехватом ввода-вывода. Но получилось громоздко
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys, io
def code(a, x):
    input_stream = io.StringIO()
    output_stream = io.StringIO()
    input_stream.write(str(a))
    input_stream.write('\n')
    input_stream.write(str(x))
    input_stream.seek(0)
    saved_in = sys.stdin
    saved_out = sys.stdout
    sys.stdin = input_stream
    sys.stdout = output_stream
    with open("code.txt", "r", encoding="utf-8") as file:
        # исполнение кода в файле с использованием переменных введенных в функции
        exec(file.read())
    sys.stdin = saved_in
    sys.stdout = saved_out
    output_stream.seek(0)
    # то что выводит компилятор в другом коде
    print(output_stream.read())
# запуск кода с функцией
code(2, 2)
# выполняется код в файле и выводит то что вышло
Добавлено через 6 минут
Думаю, вариант с import и return лучше. Или вариант, который показал Рыжий Лис.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.10.2020, 15:26
КулХацкеръ, вполне норм. Даже твой вариант правильнее.

Добавлено через 35 секунд
Только ты ещё один '\n' потерял.
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
21.10.2020, 18:05
Только ты ещё один '\n' потерял.
Правда? У меня просто программа отработала и так.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.10.2020, 18:11
Видимо, встретила EOF во входном потоке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2020, 18:11
Помогаю со студенческими работами здесь

Как в Outlook определить что его вызывают и запустить свой код
Здравствуйте, специалисты и не очень. После того как я перешел с Bat на Outlook мне всегда хотелось его (Outlook) заставить сортировать...

Как изменить код, чтобы он получал лишь текст? К примеру, зашел на сайт, вывел список тем, пользователей и т.д
package ru.startandroid......................... import android.app.Activity; import android.content.Intent; import...

Как запустить компилятор java
jdk установлен ,путь в Path прописан как запустить компилятор java? скачал eclipse ,запускаю файл eclipse.exe вылазит окно в котором...

Как запустить код bat-файла, который, в свою очередь, запускает сервер, написанный на Java
Есть батник... В нем такой код(запускает яву с параметрами которые указаны в коде)... Этот батник запускает сервер... Который написан на...

Как запустить компилятор в parallel studio
Как запустить компилятор в parallel studio? То есть саму студию. Не могу ярлык найти, только для VS есть и различных либ.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru