Próbuję wykonać plik za pomocą poleceń Pythona z poziomu interpretera.
EDYCJA: Próbuję użyć zmiennych i ustawień z tego pliku, aby nie wywoływać osobnego procesu.
Próbuję wykonać plik za pomocą poleceń Pythona z poziomu interpretera.
EDYCJA: Próbuję użyć zmiennych i ustawień z tego pliku, aby nie wywoływać osobnego procesu.
Odpowiedzi:
Kilka sposobów.
Z muszli
python someFile.py
Z wnętrza JUŻ, naciśnij F5 .
Jeśli piszesz interaktywnie, spróbuj tego: ( tylko Python 2 !)
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
W przypadku Python3 użyj:
>>> exec(open("filename.py").read())
pythonnie działa, jeśli używasz Pythona 3, python3zamiast niego jest używany.
stdinz pliku takiego jak using <do skryptu wykonawczego z execfile(). @ s-lott
pythonwskazuje na python3.
pythonpliku wykonywalnego, który system znajdzie podczas przeglądania folderów w zmiennej środowiskowej PATH.
W przypadku Python 2:
>>> execfile('filename.py')
W przypadku Python 3:
>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
Zobacz dokumentację . Jeśli używasz języka Python 3.0, zobacz to pytanie .
Zobacz odpowiedź @ S.Lott, aby zobaczyć, w jaki sposób uzyskujesz dostęp do globals z pliku filename.py po jego wykonaniu.
exec(open("./path/to/script.py").read(), globals())
Spowoduje to wykonanie skryptu i umieszczenie wszystkich jego zmiennych globalnych w globalnym zakresie interpretera (normalne zachowanie w większości środowisk skryptowych).
openbezpośrednio odczytuje kod ze skryptu. Aby przekazać argumenty, spójrz na tę odpowiedź , ale zamiast tego execfileoczywiście użyj execi openjak pokazano powyżej.
Zaskoczony, jeszcze tego nie widziałem. Możesz wykonać plik, a następnie pozostaw interpretera otwartego po zakończeniu wykonywania, używając -iopcji:
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
Próbuję użyć zmiennych i ustawień z tego pliku, aby nie wywoływać osobnego procesu.
Po prostu zaimportowanie pliku za pomocą import filename(minus .py, musi znajdować się w tym samym katalogu lub w twoim PYTHONPATH) spowoduje uruchomienie pliku, dzięki czemu jego zmienne, funkcje, klasy itp. Będą dostępne w filename.variableprzestrzeni nazw.
Jeśli masz cheddar.pyzmienną spam i jaja funkcyjne - możesz je zaimportować import cheddar, uzyskać dostęp do zmiennej cheddar.spami uruchomić funkcję, wywołująccheddar.eggs()
Jeśli masz kod, cheddar.pyktóry znajduje się poza funkcją, zostanie on uruchomiony natychmiast, ale tworzenie aplikacji, które wykonują operacje podczas importu, utrudni ponowne użycie kodu. Jeśli to możliwe, umieść wszystko w funkcjach lub klasach.
from filename import *
Moim zdaniem najlepszym sposobem jest:
import yourfile
i po zmodyfikowaniu pliku.file.py
reload(yourfile)
lub
import imp;
imp.reload(yourfile) in python3
ale to sprawi, że funkcja i klasy będą wyglądały następująco: twój_plik.funkcja1, twój_plik.klasa1 .....
Jeśli nie możesz ich zaakceptować, ostatecznym rozwiązaniem jest:
reload(yourfile)
from yourfile import *
Nie jestem ekspertem, ale zauważyłem:
jeśli na przykład masz kod mycode.py i wpiszesz po prostu „import mycode”, Python wykona go, ale nie udostępni wszystkich interpreterów. Odkryłem, że powinieneś wpisać „z importu mycode *”, jeśli chcesz udostępnić interpreterowi wszystkie zmienne.
Po prostu zrób,
from my_file import *
Pamiętaj, aby nie dodawać rozszerzenia .py. Jeśli używasz pliku .py w podkatalogu,
from my_dir.my_file import *
W przypadku Python 3:
>>> exec(open("helloworld.py").read())
Upewnij się, że jesteś w odpowiednim katalogu przed uruchomieniem polecenia.
Aby uruchomić plik z innego katalogu, możesz użyć następującego polecenia:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Załóżmy, że potrzebujesz następujących funkcji:
__name__ == '__main__' ma wartość True, więc skrypty zachowują się poprawnie jak skrypty.exec(open('foo.py').read())Nie funkcji 1 W import foostrategii nie cecha 2
Aby uzyskać oba, potrzebujesz:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)