Tercüman içinde python komutları ile bir dosya yürütmek çalışıyorum.
EDIT: Ben ayrı bir işlemi çağırmak için değil, bu dosyadan değişkenleri ve ayarları kullanmaya çalışıyorum.
Tercüman içinde python komutları ile bir dosya yürütmek çalışıyorum.
EDIT: Ben ayrı bir işlemi çağırmak için değil, bu dosyadan değişkenleri ve ayarları kullanmaya çalışıyorum.
Yanıtlar:
Birkaç yol.
Kabuktan
python someFile.py
IDLE içinden F5 tuşuna basın .
Etkileşimli olarak yazıyorsanız, şunu deneyin: ( yalnızca Python 2 !)
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
Python3 için şunları kullanın:
>>> exec(open("filename.py").read())
pythonpython 3 çalıştırıyorsanız, python3bunun yerine çalışmaz .
stdinkullanmak gibi bir dosyadan sağlamak için herhangi bir yolu var mı? @ s-lott<execfile()
pythonişaret eden ortamlar gördüm python3.
python, ortam değişkenindeki klasörlere bakarken sistemin hangi yürütülebilir dosyayı bulduğuna bağlıdır PATH.
Python 2 için:
>>> execfile('filename.py')
Python 3 için:
>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
Belgelere bakın . Python 3.0 kullanıyorsanız, bu soruya bakın .
Globals dosyasını yürüttükten sonra dosyaadı.py'dan nasıl eriştiğinize ilişkin bir örnek için @ S.Lott tarafından verilen cevaba bakın.
exec(open("./path/to/script.py").read(), globals())
Bu bir komut dosyası yürütecek ve tüm global değişkenlerini yorumlayıcının global kapsamına (çoğu komut dosyası ortamındaki normal davranış) koyacaktır.
openkodu doğrudan koddan okur. Argümanları iletmek için bu cevaba bakın , ancak yukarıda gösterildiği gibi execfileaçıkça kullanın execve kullanın open.
Henüz görmedim şaşırttı. Bir dosyayı yürütebilir ve yürütme sona erdikten sonra aşağıdaki -iseçeneği kullanarak yorumlayıcıyı açık bırakabilirsiniz :
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
Ayrı bir işlemi çağırmak için değil, bu dosyadan değişkenleri ve ayarları kullanmaya çalışıyorum.
Eh, sadece import filename(eksi .py, aynı dizinde veya sizin üzerinde olması gerekir PYTHONPATH) ile dosyayı içe aktarmak dosyayı değişkenler, fonksiyonlar, sınıflar, vb filename.variablead alanında kullanılabilir hale getirir .
Dolayısıyla cheddar.py, değişken spam ve yumurta işlevine sahipseniz, bunları içe aktarabilir import cheddar, değişkene erişebilir cheddar.spamve işlevi çağırarak çalıştırabilirsiniz.cheddar.eggs()
cheddar.pyBir işlevin dışında kodunuz varsa , hemen çalıştırılır, ancak içe aktarma sırasında bir şeyler çalıştıran uygulamalar oluşturmak kodunuzu yeniden kullanmayı zorlaştıracaktır. Mümkünse, her şeyi işlevlerin veya sınıfların içine koyun.
from filename import *
Benim görüşüme göre, en iyi yol:
import yourfile
ve file.py dosyasını değiştirdikten sonra
reload(yourfile)
veya
import imp;
imp.reload(yourfile) in python3
ancak bu işlevi ve sınıfları şöyle gösterecektir: yourfile.function1, yourfile.class1 .....
Bunları kabul edemezseniz, nihayetinde çözüm:
reload(yourfile)
from yourfile import *
Ben bir uzman değilim ama fark ettim:
örneğin kodunuz mycode.py ise ve yalnızca 'kodumu içe aktar' yazarsanız, Python kodu çalıştırır ancak tüm değişkenlerinizi yorumlayıcı tarafından kullanılabilir hale getirmez. Tüm değişkenleri tercüman tarafından kullanılabilir yapmak istiyorsanız, aslında 'mycode import *' yazmanız gerektiğini buldum.
Sadece yap,
from my_file import *
.Py uzantısı eklemediğinizden emin olun. Alt dizindeki .py dosyanız kullanılıyorsa,
from my_dir.my_file import *
Python 3 için:
>>> exec(open("helloworld.py").read())
Komutu çalıştırmadan önce doğru dizinde olduğunuzdan emin olun.
Farklı bir dizindeki bir dosyayı çalıştırmak için aşağıdaki komutu kullanabilirsiniz:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Aşağıdaki özellikleri istediğinizi varsayalım:
__name__ == '__main__' Doğru olduğundan, komut dosyaları komut dosyaları gibi düzgün davranır.exec(open('foo.py').read())Özelliği 1 başarısız import foostrateji özelliği 2 başarısız
Her ikisini de elde etmek için buna ihtiyacınız var:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)