2013-03-06 22 views
6

sconsとPythonの新機能です。 私は、pythonスクリプト内からsconsを呼び出す方法があるのだろうかと思っていました。Pythonスクリプトからsconsを呼び出す

私のpythonスクリプトは、コンパイルするコードが存在するディレクトリのリストをユーザから受け取ります(他にも重要なことはありません)。 また、sconsによって という名前の実行可能ファイルの名前として使用される文字列を生成します。

この情報を私のpythonスクリプトからsconsに渡してから、sconsを呼び出したいとします。 これを行う簡単な方法はありますか?私は以下のような可能性を考えることができ

  • 使用subprocess.call("scons"...)私はsconsのは、私は、コマンドライン引数
  • がファイルにPythonスクリプトの書き込みを持っているとして渡すために必要なすべての情報を受け入れるかどうかわからないんだけど。 SConscriptにファイルを解析させ、情報が渡されるようにします。

答えて

2

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

コマンドライン引数の代わりに考慮する1つのオプションは、SCONSFLAGS上記here。個人的には、私はこのオプションを使用しないことを好みます。

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

実行可能ファイル名の文字列を渡すことに関して:SConsはこれを好まないかもしれません。少なくとも、実行可能な特定の文字列でスクリプトを実行した後、別の実行可能な文字列で2回目を実行した後で、同じ実行可能ファイル名でSConsが実行されないと、実行ファイルを残してしまう可能性があります。

3

まあ、理論的には可能だと思います。 scons実行ファイル自体はPythonスクリプトに過ぎず、sys.path変数を変更した後に実行するのはSCons.Script.main()です。しかし、おそらくあなたは本当にあなたが望むことをする方法を理解するために、ソースを深く掘り起こす必要があります。

もっと洗練されたソリューションが、SConscriptファイルからスクリプトを呼び出しています。これはおそらく意図された使用法であり、はるかに簡単に証明されるはずです。

+1

私は 'SCons.Script.main()'を一度呼び出すと、それが価値がないと判断しました。私は 'サブプロセスで呼び出しをラップするために行った。call() 'を呼び出して、私の答えで述べたようにコマンドライン引数を処理します。私は実際のsconsスクリプトをバイパスしようとすると怪我の世界につながる可能性があると思う:) – Brady

+0

私はこれは私の質問に答えるとは思わない:私は私がちょうど持っている情報を渡す方法は、SConscriptスコオンを呼び出す前に得られた? –

+0

sconsの前にスクリプトを呼び出す必要が本当にありますか? SConscriptファイルからスクリプトをモジュールとしてインポートし、必要なときに実行して、ユーザーから必要な入力を収集することができます。技術的には同じではありませんが、ユーザーの関心があれば違いはありません。それがオプションでない場合、Brandyによって提案されたルートは実行可能な解決策です。 –

1

お返事ありがとうございます。

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

関連する問題