2012-04-27 10 views
0

自分自身をクラスター環境に送信してバックグラウンドでいくつかのタスクを実行することを想定したPythonクラスがあります。例えばPythonスクリプトとクラスは同じファイルにあります

class AwesomeTaskController(object): 
    def run(bunch_of_tasks): 
     for task in bunch_of_tasks: 
      cmd = "%s %s" % (os.path.abspath(__file__), build_cli_paramters(task)) 
      # call the API to submit the cmd 

if __name__ == "__main__": 
    #blah blah do stuff with given parameters 

このクラスが初めて実行されました。最初に実行されたときに、pycファイルが作成されます。このpycファイルは実行可能ではありません(許可が必要です)。

2回目にこのクラスを使用すると、コマンドはpycを直接使用し、許可が拒否されたと訴えます。おそらく私は間違った角度からこれに近づいていますか?

+0

どのようなクラスタですか? –

+0

私はPBSスクリプトを書く必要があることだけを知っています。 –

答えて

0

.pycファイル自体は実行可能ではありません。常に.pyファイルを実行する必要があります。 .pycファイルは、Pythonが.pyファイルを次に実行するときにある程度時間を節約するために生成する.pyファイルのコンパイル済みバージョンです。

あなたのケースでは、__file__が ".pyc"で終わるかどうかを確認し、末尾の "c"を削除するだけです。

(__file__[:-1] if __file__.endswith(".pyc") else __file__) 

、それはあなたの問題を解決する必要があります:あなたがすることによって、言う、とあなたのスクリプトで__file__を置き換えることを行うことができます。

関連する問題