0

クラスター環境に送信することにより、バックグラウンドでいくつかのタスクを実行することを想定している 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 を直接使用し、許可が拒否されたと不平を言います。おそらく私はこれに間違った角度からアプローチしていますか?

4

1 に答える 1

0

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

あなたの場合、「.pyc」で終わっているかどうかを確認し__file__、末尾の「c」を削除するだけです。__file__たとえば、スクリプトを次のように置き換えることで、これを行うことができます。

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

それはあなたの問題を解決するはずです。

于 2012-05-03T07:13:31.527 に答える