2

Python では、 atexitのようなものがあります。Atexit は「ティアダウン」に使用することを意図しています。「セットアップ」のようなものが必要です。私が実行するスクリプトの前に、このsetUpが実行されます。

編集

個別に実行するいくつかの小さなスクリプトがあることを指摘する必要がありました。これらのスクリプトはすべて同じロジックに接続されています。プロジェクトに依存性注入を導入したいのですが、たとえば、すべてのスクリプトを実行する前にpython-injectを構成する必要があります。inject.configure(myConfiguration)すべてをセットアップするためだけに、すべてのスクリプトの最初に同じ設定を DRY したくありません。

ここで、PYTHONSTARTUP に関する @en_Knight の提案を確認してから、もう一度戻ってきます。

解決 策 @en_Knight が PYTHONSTARTUP について提供したことは確実に機能します。私はすべての展開力を持っていますが:]それも良い考えではないと感じています。python-injectのソースを変更する際の問題を解決しました

ご協力ありがとう御座います!

4

1 に答える 1

2

atexit を使用する場合、最初に関数を登録する必要があることに注意してください。「atenter」機能を強制するために、同様のことを行うことをお勧めします。

例えば

# start of my code
atenter() # place 1

def main():
   atenter() # place 2
   # run main code

if __name__ == '__main__':
   atenter() # place 3
   main()

場所 2 は、ほとんどの状況で行く場所のようです。場所 1 の欠点は、メイン関数をインポートするファイルが誤って aenter を呼び出すことです。これは、一部のプラットフォームでマルチプロセシングを行う場合にも問題を引き起こします。if __name__ == "__main__": は何をしますか?

場所 3 の問題は、別のファイルのメイン関数の上にラッパー (「RunExamples」コマンド ライン ユーティリティや GUI など) を配置すると、atenter が呼び出されないことです。main を 2 回呼び出すべきではないことをドキュメントで指定するだけでおそらく十分ですが、強制することもできます。

よりエレガントな外観を探している場合は、「atenter」デコレーターを作成し、メイン関数をそれでラップすることができます。シングルトン パターンなどを使用すると、何回呼び出されても、1 回だけ実行されるようにすることができます。


別のアプローチがあります。pythonのドキュメントから

パイソンスタートアップ

これが読み取り可能なファイルの名前である場合、最初のプロンプトが対話モードで表示される前に、そのファイル内の Python コマンドが実行されます。ファイルは、対話型コマンドが実行されるのと同じ名前空間で実行されるため、その中で定義またはインポートされたオブジェクトは、対話型セッションで修飾なしで使用できます。このファイルでプロンプト sys.ps1 と sys.ps2 を変更することもできます。

この環境変数を変更すると、指定された状況下で関数を実行できます。これは適切な展開戦略ではありません (python が実行されているモードを含む、ローカル コンピューターでいくつかの条件が満たされていることが条件となります)。ただし、探しているものにより厳密に一致する可能性があり、展開時に Python 環境を強力に制御できる場合は実現可能かもしれません。

于 2015-12-11T16:53:53.173 に答える