2016-11-24 10 views
0

私はすでに、私は私の質問は、インポートされたモジュール内のコードは、ものと同じ種類の操作を行うことができますか?このPythonモジュールは、そのファイル名、またはファイル名をインポートすることはできますか?

import sys 
name = sys.argv[0] 

ている見た中で最も簡単な、Pythonプログラムは、そのファイル名を決定することができることを知っていますか私はPython 3.5を使用しています。

私は利便性と拡張性のために、メインセクションに分割され、大規模なプログラムを書いている、と「アドオン」、Audacityはあるというように。アドオンモジュールをプログラムディレクトリに追加するだけで、簡単に拡張してDRYできるようにしようとしています。メインプログラムがそれを取り出して使用することができます。私は、モジュールファイル名にプログラム固有の接頭辞が付いている名前付け基準を使用しています。そして、内部にいくつかの標準名付きのクラスとデータを実装しています。

メインプログラムがアドオン前もっての名前を知らないので、私は私ができる、OK

def get_available_modules(self, prefix=""): 
    """ import the files named prefix_xxx.py in this folder """ 

    files = os.listdir(os.getcwd()) 
    self.modules = {} 

    for file_name in files: 
     # print('examining ', file_name) 
     if file_name.startswith(prefix): 
      # print('this one looks OK ', file_name) 
      # strip the .py off the end 
      mod_name = file_name[:-3] 
      # strip prefix off the front 
      mod_ID = mod_name[len(prefix):] 

      self.modules[mod_ID] = __import__(mod_name) 

    # print('loaded modules ') 
    # for name in self.modules: 
     # print(name) 

モジュールを持った仕事に思われる、このようにそれらをインポートしていますそれらの操作にアクセスし、その説明をlistBoxやmenuesに入れ、コントロールパネルをインスタンス化して表示し、作業に必要なリソースをポイントします。しかし、自己一貫性をデバッグするためには、モジュールが呼び出されたものとそのファイル名が何であるかを判断できるようにしたいと思います。私は以前のものを編集して新しい機能を作り出すつもりだし、私はすべてをに一貫して変更しないことを知っている。

明らかにオブジェクトを起動するとき、私はmod_IDを渡すこともできますが、それは魔法使いがウサギを入れていることを発見したようなものです帽子に。

自体にそのファイル名がアクセスできるようにモジュール内の任意のパラメータがある場合は?

+0

自分で試したことはありませんが、このように見えます:__ loader __。fullname https://www.python.org/dev/peps/PEP-0302 /及びhttp://stackoverflow.com/questions/5183601の –

+0

可能な重複[\ _ \ _ファイルは、\ _ \ _属性Pythonの絶対的または相対的?](http://stackoverflow.com/questions/7116889/ python-ファイル属性絶対または相対) – user590028

+0

うーん、私はそれがどこかTFMでRそれが可能だと確信している!____loader____に少なくともいない、.fullnameを持っていないように動作____name____ dunder名dunder私3.5。 –

答えて

0

(OPに代わって投稿)

当たり前!それは____name____です(ダンダー名のダンダー、実際の倒錯者は書式で混乱します)

関連する問題