2017-01-25 25 views
1

私は、別のスクリプトのために、subprocess.Popenコールを使ってUbuntuの下でpythonpathを準備しようとしています。 Python estimatekeleton.pyの呼び出しは正常に動作します。しかし、Pythonパスを準備する必要があるので、インポートする必要のある他のスクリプトを見つけることができないため、完全には正しく動作しません。 export PYTHONPATHコマンドはcommands.getoutputで機能しました。しかし、commands.getoutputを使用すると、estimatedkeletonスクリプトはまだ動作しません。インポートする必要のある他のファイルを見つけることができません。私は検索機能との適切な解決策を見つけることができませんでしたPython Subprocess Popen LinuxでPythonパスを準備する

OSError: [Errno 2] No such file or directory 

:subprocess.Popen経由でPYTHONPATHをエクスポートする私の試みは、エラー番号2になりました。だから私はこのボードのより高度なユーザーの一人がexportはビルトインシェルであるため、

import subprocess as sub 
import os 
import commands 

proc = sub.Popen(["export", "PYTHONPATH=\"${PYTHONPATH}:/media/sf_myFolder/Scripts/code/\""], 
        stdout=sub.PIPE, 
        stderr=sub.STDOUT) 

print proc.communicate()[0] 

proc2 = sub.Popen(["python", "estimateskeleton.py"], 
        stdout=sub.PIPE, 
        stderr=sub.STDOUT) 

print proc2.communicate()[0] 

答えて

1

敬具あなたの最初のPopenコマンドがshell=Trueずに働くだろう私を助けることができることを期待しています。

しかし、Popenによって生成された2番目のプロセスは、デッドプロセスで設定された以前の変数を認識していないため、修正できません。うわーので、あなたの次のPythonコマンドが

+0

PYTHONPATHに追加されたフォルダで実行され

os.putenv("PYTHONPATH",os.pathsep.join([os.getenv("PYTHONPATH",""),"/media/sf_myFolder/Scripts/code"])) 

を:

ので、代わりの最初の無用Popen実行するには、次のようなos.putenv()を使用してPYTHONPATHを既存のパスを追加することができます、 どうもありがとう!それは本当に役に立ち、私の問題を解決しました。私は – PythonBeginner

+0

にできるだけ早くそれを正確に評価するでしょう、あなたはすでに答えを受け入れることができます。 –

+0

'shell = True'を使用しているので、より簡単な方法は、起動したシェルのenv varを更新する単一のコマンドを直接発行することです:' PYTHONPATH = $ PYHTONPATH:something_else command args'。 – 9000

関連する問題