SORU
19 Kasım 2008, ÇARŞAMBA


Dinamik modül Python al

Örneğin, bağımsız değişken olarak, bir komut olarak alır Python ile bir uygulama yazıyorum

$ python myapp.py command1

Uygulama, ana uygulama kaynağını değiştirmek zorunda kalmadan yeni komutları uygulayan yeni modülleri eklemek genişletilebilir olmak istiyorum. Ağaç gibi bir şey görünüyor:

myapp/
    __init__.py
    commands/
        __init__.py
        command1.py
        command2.py
    foo.py
    bar.py

Uygulamanın çalışma zamanında kullanılabilir komut modülleri bulmak ve uygun bir çalıştırmak istiyorum o kadar.

Şu anda bu uygulanan bir şey

command = sys.argv[1]
try:
    command_module = __import__("myapp.commands.%s" % command, fromlist=["myapp.commands"])
except ImportError:
    # Display error message

command_module.run()

Bu sadece eğer muhtemelen bu kod ile ne yaptığımızı başarmak için daha deyimsel bir yolu olup olmadığını merak ediyorum sadece iyi çalışır.

Ben özellikle yumurta veya uzantısı puan kullanarak almak istemiyorum unutmayın. Bu açık kaynak kodlu bir proje değil ve olmasını da beklemiyorum"". eklentileri Nokta ana uygulama kodu basitleştirmek ve yeni bir komuta modülü eklenir her zaman değiştirme ihtiyacını ortadan kaldırmaktır.

CEVAP
19 Kasım 2008, ÇARŞAMBA


Hayır, bunu yapmak için ne kadar çok benziyor. Eğer siz de isterseniz exec kullanabilirsiniz.

Bunu yaparak: modüllerin bir listesini alabilirsiniz not

>>> moduleNames = ['sys', 'os', 're', 'unittest'] 
>>> moduleNames
['sys', 'os', 're', 'unittest']
>>> modules = map(__import__, moduleNames)

Dive Into Python düz sökük.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Apple

    Apple

    22 HAZİRAN 2005
  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008