Можно ли из интерпретатора Python выполнить скрипт по адресу?
Моя программа написанная на C#, запускает скрипты на python при помощи создания процесса модуля python, установленного на компьютере, дальше с помощью передачи в стандартный поток ввода вводятся данные, и из потока вывода считываются данные.
Это все работает, но мне кажется, что программа тратит много времени на запуск процесса python. И к тому же таких скриптов может быть несколько и мало того, их надо вызывать чуть ли не раз в секунду.
Возможно ли в рамках единого процесса python, указать какие скрипты я хочу выполнить? То есть есть какая-нибудь команда интерпретатора python по типу execute("адрес файла") ?
А гуглить пробовали? exec() принимает строку с питоновским кодом, так что загрузить содержимое скрипта придётся самому. Но тогда потребуется лишь крошечная обертка, которая читает скрипт из stdin и скармливает в exec().
Вообще я бы задумался, а не стоит ли перенести больше функций в питон скрипт, и сделать его полноценной программой, вместо "пристяжного" интерпретатора скриптов.
да гуглил про exec, и уже узнал, что можно сделать что-то такое exec(open("файл").read())
правда какие-то проблемы с этим, не удается запустить нормально)
Сергей, ну на стэковерфлоу есть такой кусочек кода.
def execfile(filepath, globals=None, locals=None):
if globals is None:
globals = {}
globals.update({
"__file__": filepath,
"__name__": "__main__",
})
with open(filepath, 'rb') as file:
exec(compile(file.read(), filepath, 'exec'), globals, locals)
Здесь добавляются кое-какие глобальные переменные, в частности __main__, который часто используется.
По идее это должно быть ближе к окружению при обычном выполнении скрипта.
Кроме того, если скрипты не меняются часто, то можно кэшировать результат вызова compile(), а значит, и обращение к файлу.