Как выполнить файл в интерпретаторе Python? - PullRequest
250 голосов
/ 22 июня 2009

Я пытаюсь выполнить файл с командами Python из интерпретатора.

РЕДАКТИРОВАТЬ: я пытаюсь использовать переменные и настройки из этого файла, чтобы не вызывать отдельный процесс.

Ответы [ 10 ]

230 голосов
/ 22 июня 2009

Для Python 2:

>>> execfile('filename.py')

Для Python 3:

>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())

См. документацию . Если вы используете Python 3.0, см. этот вопрос .

См. Ответ @ S.Lott для примера того, как вы получаете доступ к глобальным переменным из filename.py после его выполнения.

194 голосов
/ 22 июня 2009

Несколько способов.

Из скорлупы

python someFile.py

Внутри IDLE, нажмите F5 .

Если вы печатаете в интерактивном режиме, попробуйте следующее: (только Python 2!)

>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
88 голосов
/ 22 июля 2015

Python 2 + Python 3

exec(open("./path/to/script.py").read(), globals())

Это выполнит скрипт и поместит все его глобальные переменные в глобальную область интерпретатора (нормальное поведение в большинстве сред сценариев).

Python 3 exec Документация

34 голосов
/ 17 января 2017

Удивлен, я этого еще не видел. Вы можете выполнить файл и затем оставить интерпретатор открытым после завершения выполнения, используя параметр -i:

| foo.py |
----------
testvar = 10

def bar(bing):
  return bing*3

--------



$ python -i foo.py
>>> testvar 
10
>>> bar(6)
18
29 голосов
/ 22 июня 2009

Я пытаюсь использовать переменные и настройки из этого файла, чтобы не вызывать отдельный процесс.

Что ж, простой импорт файла с import filename (минус .py, должен находиться в том же каталоге или на вашем PYTHONPATH) запустит файл, сделав его переменные, функции, классы и т. Д. Доступными в filename.variable Пространство имен.

Так что, если у вас есть cheddar.py с переменной spam и функцией egg - вы можете импортировать их с помощью import cheddar, получить доступ к переменной с помощью cheddar.spam и запустить функцию, вызвав cheddar.eggs()

Если у вас есть код в cheddar.py, который находится вне функции, он будет запущен немедленно, но сборка приложений, выполняющих что-либо при импорте, затруднит повторное использование вашего кода. Если возможно, поместите все в функции или классы.

8 голосов
/ 30 марта 2016

Для python3 используйте либо с xxxx = name из yourfile.

exec(open('./xxxx.py').read())
8 голосов
/ 16 ноября 2013

Я не эксперт, но вот что я заметил:

если ваш код, например, mycode.py, и вы набираете просто «import mycode», Python выполнит его, но не сделает все ваши переменные доступными для интерпретатора. Я обнаружил, что на самом деле вы должны печатать «из mycode import *», если хотите сделать все переменные доступными для интерпретатора.

7 голосов
/ 08 августа 2018

Для Python 3:

>>> exec(open("helloworld.py").read())

Перед запуском команды убедитесь, что вы находитесь в правильном каталоге.

Чтобы запустить файл из другого каталога, вы можете использовать следующую команду:

with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
    exec(file.read())
7 голосов
/ 24 июня 2017

На мой взгляд, лучший способ это:

import yourfile

и после изменения yourfile.py

reload(yourfile)   

или

import imp; 
imp.reload(yourfile) in python3

но это сделает функцию и классы такими: yourfile.function1, yourfile.class1 .....

Если вы не можете принять это, окончательное решение:

reload(yourfile)
from yourfile import *
3 голосов
/ 26 декабря 2017

Просто сделай,

from my_file import *

Не добавляйте расширение .py. Если ваш .py файл используется в подкаталоге,

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