2016-11-30 8 views
-1

Rubyでは、(a)実際にコードを実行することなく対話型Ruby端末にロードできるようにクラス/モジュールを書くことができます。(b)シェルスクリプト。

例えば

、与えられたファイルfoo.rbは:

class Foo 
    def bar 
    puts 'Foo bar' 
    end 
end 

if __FILE__ == $PROGRAM_NAME 
    foo = Foo.new 
    foo.bar 
end 

これはirbまたはpryで使用するためにFooクラスをロードしますが、fooのインスタンス化やif文の中のメソッド呼び出しfoo.barでは実行しないだろう終わり。

しかし、コマンドラインでruby foo.barを実行すると、"Foo bar"が返され、終了します。

これに相当するPython(v2またはv3)がありますか?

は、私が(2.7に)来た最も近いがこれですが、きれいな方法があるかもしれないような気がします:

import os, sys 

if os.__file__ == sys.argv[0]: 
    # do stuff 
+0

あなたはについて話している: '場合__name__ == "__main__": メイン() ' – Fallenreaper

+0

しかし、' __name__ == "__main __" 'は、あなたが対話シェルにいるかどうかにかかわらずtrueですか? –

+0

独立して実行できるファイルを作成したい場合や、ファイルがスタンドアロンで実行されている場合にデフォルトのメインを持つことができるようにスクリプトを定義する場合は、ファイルがインポートされたアイテムとして実行されている場合は、mainを実行するのではなく、代わりに 'Foo'クラスを定義するだけです。 – Fallenreaper

答えて

2

は、あなたがこのような何かを行うことができます。

この例では、このようなものが必要になります。

class Foo: 
    def bar(self): 
    print 'Foo bar' 

def main(): 
    foo = Foo() 
    foo.bar() 

if __name__ == "__main__": 
    main() 

私は個人的には、上記の例のようにメイン関数を定義したいが、簡単にだけ行うことができます:

if __name__ == "__main__": 
    foo = Foo() 
    foo.bar() 
1

Pythonモジュールは、モジュール名を保持__name__変数が含まれます。トップレベルのスクリプトの場合、名前は__main__です。

if __name__ == "__main__": 
    main() 

Pythonのファイルが独立して実行された場合にmain()を実行します:あなたはモジュールの一部対independantlyファイルを実行しているとき、あなたの例では

class Foo: 
    def bar(self): 
    print('Foo bar') 

if __name__ == "__main__": 
    foo = Foo() 
    foo.bar()