Я пытаюсь выполнить файл с командами python из интерпретатора.
EDIT: Я пытаюсь использовать переменные и настройки из этого файла, а не для вызова отдельного процесса.
Я пытаюсь выполнить файл с командами python из интерпретатора.
EDIT: Я пытаюсь использовать переменные и настройки из этого файла, а не для вызова отдельного процесса.
Несколько способов.
Из скорлупы
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())
Для 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 после его выполнения.
exec(open("./path/to/script.py").read(), globals())
Это выполнит script и поместит все глобальные переменные в глобальную область интерпретатора (нормальное поведение в большинстве сред сценариев).
Удивленный, я еще этого не видел. Вы можете выполнить файл, а затем оставить интерпретатор открытым после завершения выполнения команды с помощью параметра -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
, который находится вне функции, он будет запущен немедленно, но при создании приложений, которые запускают материал при импорте, будет сложно повторно использовать ваш код. Если все возможно, поместите все в функции или классы.
Я не эксперт, но это то, что я заметил:
если ваш код - mycode.py, например, и вы вводите только "import mycode", Python выполнит его, но он не сделает все ваши переменные доступными для интерпретатора. Я обнаружил, что вы должны набирать на самом деле "из импорта mycode", если вы хотите сделать все переменные доступными для интерпретатора.
С моей точки зрения, лучший способ:
import yourfile
и после изменения файла yourfile.py
reload(yourfile)
или
import imp;
imp.reload(yourfile) in python3
но это заставит функции и классы выглядеть так: yourfile.function1, yourfile.class1.....
Если вы не можете принять их, окончательное решение:
reload(yourfile)
from yourfile import *
Для python3 используйте либо xxxx = name
из yourfile
.
exec(open('./xxxx.py').read())
Для Python 3:
>>> exec(open("helloworld.py").read())
Перед запуском команды убедитесь, что вы находитесь в правильном каталоге.
Чтобы запустить файл из другого каталога, вы можете использовать следующую команду:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Просто делать,
from my_file import *
Не добавляйте расширение .py. Если ваш .py файл в подкаталоге используется,
from my_dir.my_file import *