Я пытаюсь выполнить файл с командами Python из интерпретатора.
РЕДАКТИРОВАТЬ: я пытаюсь использовать переменные и настройки из этого файла, чтобы не вызывать отдельный процесс.
Я пытаюсь выполнить файл с командами Python из интерпретатора.
РЕДАКТИРОВАТЬ: я пытаюсь использовать переменные и настройки из этого файла, чтобы не вызывать отдельный процесс.
Ответы:
Несколько путей.
Из скорлупы
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не работает, если вы используете Python 3, python3используется вместо этого.
stdinиз файла, как использование <для выполнения сценария с в execfile().? @ s-
pythonуказывает на python3.
pythonисполняемый файл система находит при просмотре папок в переменной среды PATH.
Для 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())
Это выполнит сценарий и поместит все его глобальные переменные в глобальную область интерпретатора (нормальное поведение в большинстве сред сценариев).
openнепосредственно читает код из скрипта. Чтобы передать аргументы, посмотрите на этот ответ , но вместо этого execfile, очевидно, используйте execи openкак показано выше.
Удивлен, я еще не видел это. Вы можете выполнить файл и затем оставить интерпретатор открытым после завершения выполнения, используя -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переменная spam и функция eggs, вы можете импортировать их с помощью import cheddar, получить доступ к переменной с помощью cheddar.spamи запустить функцию, вызвавcheddar.eggs()
Если у вас есть код, cheddar.pyкоторый находится за пределами функции, он будет запущен немедленно, но сборка приложений, запускающих что-либо при импорте, усложнит повторное использование вашего кода. Если все возможно, поместите все внутри функций или классов.
from filename import *
На мой взгляд, лучший способ это:
import yourfile
и после изменения yourfile.py
reload(yourfile)
или
import imp;
imp.reload(yourfile) in python3
но это сделает функцию и классы похожими на это: yourfile.function1, yourfile.class1 .....
Если вы не можете принять их, окончательное решение:
reload(yourfile)
from yourfile import *
Я не эксперт, но вот что я заметил:
если ваш код, например, mycode.py, и вы набираете просто «import mycode», Python выполнит его, но не сделает все ваши переменные доступными для интерпретатора. Я обнаружил, что на самом деле вы должны печатать «из mycode import *», если хотите сделать все переменные доступными для интерпретатора.
Просто сделать,
from my_file import *
Не добавляйте расширение .py. Если ваш .py файл в подкаталоге используется,
from my_dir.my_file import *
Для Python 3:
>>> exec(open("helloworld.py").read())
Убедитесь, что вы находитесь в правильном каталоге, прежде чем запускать команду.
Чтобы запустить файл из другого каталога, вы можете использовать следующую команду:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Предположим, вы хотите следующие функции:
__name__ == '__main__' Истинно, поэтому скрипты ведут себя как скрипты.Функция exec(open('foo.py').read())неудач 1 import fooСтратегия неудач 2
Чтобы получить оба, вам нужно это:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)