Я намагаюся виконати файл із командами 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не працює, якщо ви використовуєте python 3, python3використовується замість цього.
stdinз файлу, як, наприклад, використання <до сценарію виконання з execfile(). @ s-lott
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змінний спам та яйця функції - ви можете імпортувати їх 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, і ви вводите просто "імпортувати мій код", Python виконає його, але він не зробить всі ваші змінні доступними для інтерпретатора. Я виявив, що вам слід ввести фактично "з імпорту мого коду *", якщо ви хочете зробити всі змінні доступними для перекладача.
Просто роби,
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)