Spowoduje to wykonanie skryptu i umieszczenie wszystkich jego zmiennych globalnych w globalnym zakresie interpretera (normalne zachowanie w większości środowisk skryptowych).
Jesteś moim bohaterem! Walczyłem z naprawdę dziwnymi rzeczami od wielu dni, w których os.getcwd () powiedział jedno, ale glob („*”) pracował w innym katalogu ... Dziękuję Ci!
pallevillesen
Czy istnieje sposób na przekazanie parametru do skryptu? następujące polecenie nie działa: exec (otwórz „setup.py install”). read (), globals ())
ben
1
@ben to nie zadziała, ponieważ 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.
Nico,
47
Zaskoczony, jeszcze tego nie widziałem. Możesz wykonać plik, a następnie pozostaw interpretera otwartego po zakończeniu wykonywania, używając -iopcji:
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.
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.
Odpowiedzi:
Kilka sposobów.
Z muszli
Z wnętrza JUŻ, naciśnij F5 .
Jeśli piszesz interaktywnie, spróbuj tego: ( tylko Python 2 !)
W przypadku Python3 użyj:
źródło
python
nie działa, jeśli używasz Pythona 3,python3
zamiast niego jest używany.stdin
z pliku takiego jak using<
do skryptu wykonawczego zexecfile()
. @ s-lottpython
wskazuje napython3
.python
pliku wykonywalnego, który system znajdzie podczas przeglądania folderów w zmiennej środowiskowejPATH
.W przypadku Python 2:
W przypadku Python 3:
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.
źródło
Python 2 + Python 3
Spowoduje to wykonanie skryptu i umieszczenie wszystkich jego zmiennych globalnych w globalnym zakresie interpretera (normalne zachowanie w większości środowisk skryptowych).
exec
Dokumentacja Python 3źródło
open
bezpośrednio odczytuje kod ze skryptu. Aby przekazać argumenty, spójrz na tę odpowiedź , ale zamiast tegoexecfile
oczywiście użyjexec
iopen
jak 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
-i
opcji:źródło
Po prostu zaimportowanie pliku za pomocą
import filename
(minus .py, musi znajdować się w tym samym katalogu lub w twoimPYTHONPATH
) spowoduje uruchomienie pliku, dzięki czemu jego zmienne, funkcje, klasy itp. Będą dostępne wfilename.variable
przestrzeni nazw.Jeśli masz
cheddar.py
zmienną spam i jaja funkcyjne - możesz je zaimportowaćimport cheddar
, uzyskać dostęp do zmiennejcheddar.spam
i uruchomić funkcję, wywołująccheddar.eggs()
Jeśli masz kod,
cheddar.py
któ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.źródło
from filename import *
Moim zdaniem najlepszym sposobem jest:
i po zmodyfikowaniu pliku.file.py
lub
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:
źródło
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.
źródło
Po prostu zrób,
Pamiętaj, aby nie dodawać rozszerzenia .py. Jeśli używasz pliku .py w podkatalogu,
źródło
Do stosowania python3 albo z
xxxx = name
oyourfile
.źródło
W przypadku Python 3:
Upewnij się, że jesteś w odpowiednim katalogu przed uruchomieniem polecenia.
Aby uruchomić plik z innego katalogu, możesz użyć następującego polecenia:
źródło
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 Wimport foo
strategii nie cecha 2Aby uzyskać oba, potrzebujesz:
źródło