SORU
13 NİSAN 2010, Salı


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 var
  • execute() 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:

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
13 NİSAN 2010, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 30GB

    30GB

    14 AĞUSTOS 2006
  • BASS212M

    BASS212M

    15 Temmuz 2009
  • Kontor.TV

    Kontor.TV

    14 Mart 2006