Как выполнить файл в интерпретаторе python?

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

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

Ответ 1

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

Из скорлупы

python someFile.py

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

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

>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module

Для Python3 используйте:

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

Ответ 2

Для 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 после его выполнения.

Ответ 3

Python 2 + Python 3

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

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

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

Ответ 4

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

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

def bar(bing):
  return bing*3

--------



$ python -i foo.py
>>> testvar 
10
>>> bar(6)
18

Ответ 5

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

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

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

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

Ответ 6

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

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

Ответ 7

С моей точки зрения, лучший способ:

import yourfile

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

reload(yourfile)   

или

import imp; 
imp.reload(yourfile) in python3

но это заставит функции и классы выглядеть так: yourfile.function1, yourfile.class1.....

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

reload(yourfile)
from yourfile import *

Ответ 8

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

exec(open('./xxxx.py').read())

Ответ 9

Для Python 3:

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

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

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

with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
    exec(file.read())

Ответ 10

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

from my_file import *

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

from my_dir.my_file import *