Nasıl python geçerli idam dosyasının yolunu alabilirim?
Bu acemi bir soru gibi gelebilir ama değil. Bazı ortak yaklaşımlar her durumda işe yaramaz:
sys.argv[0]
Bu path = os.path.abspath(os.path.dirname(sys.argv[0]))
ama bu başka bir dizinde başka bir Python komut dosyası kullanıyorsanız çalışmaz, ve bu gerçek hayatta da olabilir kullanmak anlamına geliyor.
____ dosya
Bu path = os.path.abspath(os.path.dirname(__file__))
ama bu işe yaramazsa buldum kullanarak anlamına gelir:
py2exe
__file__
bir öznitelik yok, ama workaround varexecute()
ile BOŞTA çalıştırdığınızda__file__
öznitelik yok- X 10.6
NameError: global name '__file__' is not defined
nereden OS
Eksik cevaplar ile ilgili sorular:
- Python - Find Path to File Being Run
- Python: Path to current file depends on how I execute the program
- How to know the path of the running script in Python?
- python chdir to dir the py script is in
Bir arıyorumgenel çözümkullanımı üstünde çalışacak bir olgu.
Güncelleme
Burada bir deneme durumu sonucu:
python çıktı.py (Windows)
a.py: __file__= a.py a.py: os.getcwd()= C:\zzz b.py: sys.argv[0]= a.py b.py: __file__= a.py b.py: os.getcwd()= C:\zzz
bir.py
#! /usr/bin/env python import os, sys print "a.py: sys.argv[0]=", sys.argv[0] print "a.py: __file__=", __file__ print "a.py: os.getcwd()=", os.getcwd() print execfile("subdir/b.py")
subdir/b.py
#! /usr/bin/env python import os, sys print "b.py: sys.argv[0]=", sys.argv[0] print "b.py: __file__=", __file__ print "b.py: os.getcwd()=", os.getcwd() print
ağaç
C:. | a.py \---subdir b.py
CEVAP
Doğrudan ana komut dosyasının konumunu yürütülmekte belirleyemez. Sonuçta, bazen bir komut dosyası hiç gelmedi. Örneğin, etkileşimli yorumlayıcı ya da dinamik olarak oluşturulan kod yalnızca bellekte depolanan gelebilir.
Ancak, güvenilir modüller her zaman bir dosya yüklü olduğu bir modül konumunu belirleyebilirsiniz. Aşağıdaki kodu bir modül oluşturun ve aynı dizine koy ana senaryo olarak, daha sonra ana betik modülü ithalat ve kendini bulmak için kullanabilirsiniz.
some_path/module_locator.py:
def we_are_frozen():
# All of the modules are built-in to the interpreter, e.g., by py2exe
return hasattr(sys, "frozen")
def module_path():
encoding = sys.getfilesystemencoding()
if we_are_frozen():
return os.path.dirname(unicode(sys.executable, encoding))
return os.path.dirname(unicode(__file__, encoding))
some_path/main.py:
import module_locator
my_path = module_locator.module_path()
Eğer farklı bir dizin içinde birkaç temel komut varsa, module_locator birden fazla kopyası gerekebilir.
Eğer ana script script ile ortak olarak bulunan ithalat modülleri izin vermiyor başka bir araç tarafından yüklenir tabii ki, o zaman şansınıza küsün. Bu gibi durumlarda, sonra konum bilgileri sadece programın herhangi bir yerinde yok. En iyi bahis aracını yazarları ile bir hata dosyası olacaktır.
Nasıl Ruby on Rails geçerli mutlak URL...
Nasıl kod derlemenin yolunu alabilirim...
Nasıl programlı olarak Android içinde ...
Nasıl node.js geçerli betiğin yolunu a...
Nasıl Python iki değişken mantıksal xo...