2012-01-14 2 views
3

私は現在、スクリプトは、独自のPythonインタプリタが含ま付属していたプログラムによって実行されているから、別のPythonのインスタンスを実行します。 このバージョンには必要なライブラリが含まれていないので、ローカルにインストールされた2.7のインスタンスに対して2番目のスクリプトを実行するためにos.execを使用します。別のインスタンス

しかし2番目のスクリプト、手動で実行する場合、完璧に動作し、PYTHONPATHが定義されていません。ラッパーが実行されたときにPYTHONPATHの出力をログに記録し、2番目のスクリプトがロードされると、元のインタープリターに初期化されたPYTHONPATHが両方とも2.6インスタンスになります。 これは明らかに、この動作が起きているこのいずれかのシステムにしながら、予想通り、さらに2つの他のシステム上でこの設定が100%に動作しますが、私はいくつかの環境変数は、私が予想していなかったことを渡されていると信じて私をリードしてきました。 2番目のスクリプトを呼び出すためのラッパーを作成するためのクリーンな方法はありますか?そうでなければ、env変数のこの不必要な渡しを避けることができます。

+0

なぜあなたは、あなたのニーズに合わせていないPythonインタプリタをパッケージ化していますか?とにかくプリインストールされたバージョンのPythonに依存しなければならない場合は、あなたのパッケージにPythonインタプリタを含めることに意味がないようです。 –

+0

私は元のプログラムを作成していないので、含まれているバージョンを制御することはできません。これは機能を拡張するために必要な作業です。 – Draineh

+0

'os.execle'を使って明示的に環境変数を渡そうとしましたか? – unutbu

答えて

6

os.exec*コマンドの多くのバリエーションがあります。

execl(file, *args) 
execle(file, *args, env) 
execlp(file, *args) 
execlpe(file, *args, env) 
execv(path, args) 
execve(path, args, env) 
execvp(file, args) 
execvpe(file, args, env) 
  • l変異体はargsを使用*argsvバリアントを使用。
  • p変異体はfile
  • e varients環境を置き換える見つけるために、PATH環境変数を使用します。非のバリアントは現在のプロセス のenvを使用します。

あなたは新しいプロセスに渡される環境変数を制御するために、os.execleとして、e変種のいずれかを使用することができます。

+0

ありがとうございます。私は使った。 os.execve(Pythonbinary、args、{}){}は新しいスクリプトにenv変数を渡しません – Draineh

2

あなたは1つが基本的に必要なすべてのライブラリをインストールすることができますサンドボックスを作成することができますvirtualenvを見て、撮りたいかもしれません。

+0

ありがとう。上記の答えは私の問題を解決したが、私はそれをブックマークしていつかそれを見て、ちょうどすぐにそれをスキャンして、将来私はいくつかの可能な用途を見ることができるだろう。 – Draineh

関連する問題