Как выполнить файл в интерпретаторе Python?
Я пытаюсь выполнить файл с командами Python из интерпретатора.
РЕДАКТИРОВАТЬ: я пытаюсь использовать переменные и настройки из этого файла, чтобы не вызывать отдельный процесс.
10 ответов
Несколько путей.
Из скорлупы
python someFile.py
Изнутри IDLE, нажмите F5.
Если вы печатаете в интерактивном режиме, попробуйте это.
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
Для Python 2:
>>> execfile('filename.py')
Для Python 3:
>>> exec(open("filename.py").read())
Смотрите документацию. Если вы используете Python 3.0, посмотрите этот вопрос.
Посмотрите ответ @S.Lott для примера того, как вы получаете доступ к глобальным файлам из filename.py после его выполнения.
Python 2 + Python 3
exec(open("./path/to/script.py").read(), globals())
Это выполнит скрипт и поместит все его глобальные переменные в глобальную область интерпретатора (нормальное поведение в большинстве сред сценариев).
Python 3 exec
Документация
Удивлен, я этого еще не видел. Вы можете выполнить файл и затем оставить интерпретатор открытым после завершения выполнения, используя -i
опция:
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
Я пытаюсь использовать переменные и настройки из этого файла, чтобы не вызывать отдельный процесс.
Ну, просто импортируя файл с import filename
(минус.py, должен быть в том же каталоге или на вашем PYTHONPATH
) запустит файл, сделав его переменные, функции, классы и т. д. доступными в filename.variable
Пространство имен.
Так что если у вас есть cheddar.py
с переменной спам и функцией яйца - вы можете импортировать их с import cheddar
, получить доступ к переменной с cheddar.spam
и запустите функцию, вызвав cheddar.eggs()
Если у вас есть код в cheddar.py
он находится вне функции, он будет запущен немедленно, но сборка приложений, запускающих контент при импорте, усложнит повторное использование вашего кода. Если все возможно, поместите все внутри функций или классов.
На мой взгляд, лучший способ это:
import yourfile
и после изменения yourfile.py
reload(yourfile)
или же
import imp;
imp.reload(yourfile) in python3
но это сделает функцию и классы похожими на: yourfile.function1, yourfile.class1.....
Если вы не можете принять их, окончательное решение:
reload(yourfile)
from yourfile import *
Просто делать,
from myPythonFile import *
Не добавляйте расширение.py. Если ваш.py файл в подкаталоге используется MySubDirectory.MyPythonFile
,
Я не эксперт, но вот что я заметил:
если ваш код, например, mycode.py, и вы набираете просто "import mycode", Python выполнит его, но не сделает все ваши переменные доступными для интерпретатора. Я обнаружил, что вы должны печатать "from mycode import *", если хотите сделать все переменные доступными для интерпретатора.
Для Python 3:
>>> exec(open("helloworld.py").read())
Убедитесь, что вы находитесь в правильном каталоге, прежде чем запускать команду.
Чтобы запустить файл из другого каталога, вы можете использовать следующую команду:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Для python3 используйте либо с xxxx = name
из yourfile
,
exec(open('./xxxx.py').read())
Предположим, вам нужны следующие функции:
- Исходный файл работает правильно в вашем отладчике (имя файла отображается в стеке и т. Д.)
__name__ == '__main__'
True, поэтому скрипты работают правильно как скрипты.
В exec(open('foo.py').read())
не удается функция 1 import foo
стратегия терпит неудачу, особенность 2
Чтобы получить и то, и другое, вам понадобится следующее:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)