8

私はsconsとPythonが初めてです。Pythonスクリプト内からsconsを呼び出す方法があるかどうか疑問に思っていました.

私のpythonスクリプトは、ユーザーから、一緒にコンパイルされるコードが配置されているディレクトリのリストを受け入れます(他のいくつかの重要なことを行うことに加えて)。また、scons によって作成される実行可能ファイルの名前として使用される文字列も生成します。

この情報を Python スクリプトから scons に渡し、scons を呼び出します。これを行う簡単な方法はありますか?

次の可能性が考えられます。

  • subprocess.call("scons"...)コマンドライン引数として渡す必要があるすべての情報を scons が受け入れるかどうかわかりません
  • Python スクリプトをファイルに書き込みます。SConscript でファイルを解析し、渡された情報を取得します。
4

3 に答える 3

3

まあ、理論的には可能だと思います。scons実行可能ファイル自体は単なるPythonスクリプトであり、変数SCons.Script.main()を変更した後に実行するだけです。sys.pathしかし、ソースを深く掘り下げて、必要なことを実行する方法を実際に理解する必要があります。

よりクリーンな解決策は、SConscriptファイルからスクリプトを呼び出すことです。これはおそらく意図された使用法であり、はるかに簡単であることがわかります。

于 2013-03-06T16:17:08.997 に答える
2

subprocess.call()私が取り組んでいた特定のプロジェクトに必要なやや長くて複雑なコマンド ライン引数をカプセル化するために、python 関数を使用してこれを行いました。呼び出しをカプセル化する必要がないように、呼び出しをもっと単純にするべきだったと主張する人もいますが、それは別の主題です:)

コマンド ライン引数を使用する代わりに考慮すべきオプションの 1 つは、ここでSCONSFLAGS説明したように環境変数を使用することです。個人的には、このオプションを使用しないことを好みます。

必要なすべてのオプションは、コマンド ライン オプションとして渡すことができます。SCons コマンド ライン引数をカスタマイズして処理する良い方法は、SCons AddOption()関数を使用することです。variable=valueさらに、 SCons ARGUMENTS ディクショナリを使用して単純な変数を取得できます。その他の関連する SCons コマンド ライン関数は、GetOption()およびSetOption()です。

実行可能ファイル名の文字列を渡すことについて: SCons はこれを好まない場合があります。少なくとも、特定の実行可能文字列を使用してスクリプトを 1 回実行し、次に別の実行可能文字列を使用してスクリプトを実行することを検討してください。

于 2013-03-06T17:10:33.123 に答える
1

答えてくれてありがとう。私はこの方法を使用することになりました:

Python スクリプトは、オプションのリストをテキスト ファイルに書き込み、それを閉じscons -f MySConscript_file、サブプロセス呼び出しを使用して呼び出します。SConstruct は、テキスト ファイルから値をリストに読み取り、それらを使用します。

于 2013-03-07T13:02:40.740 に答える