2009-11-06 14 views
136

Pythonのsubprocess.Popen()でコマンドの実行ディレクトリを指定する方法はありますか?例えばポーペンの作業ディレクトリを指定する

Popen('c:\mytool\tool.exe',workingdir='d:\test\local') 

私のPythonスクリプトをC:\programs\python

に位置していますされていますが、ディレクトリD:\test\localC:\mytool\tool.exeを実行することは可能でしょうか?

サブプロセスの作業ディレクトリを設定するにはどうすればよいですか?

+1

は、サブプロセスがあることに注意してください.callはサブプロセス上の単なる薄いラッパーです.Popen、そしてこのラッパーはPopenのすべての引数も扱います。少なくとも私が覚えている限りです:)単純なケースでは、subprocess.callの方が良いでしょう – shabunc

答えて

192

subprocess.Popentakes a cwd argument現在の作業ディレクトリを設定します。バックスラッシュ('d:\\test\\local')からエスケープしたり、r'd:\test\local'を使用して、バックスラッシュがPythonによってエスケープシーケンスとして解釈されないようにすることもできます。書いたとおりに、\tの部分はのタブに翻訳されます。

だから、あなたの新しい行は次のようになります、CWDとしてあなたのPythonスクリプトのパスを使用するには

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local') 

import osと、これを使用してCWDを定義します。

os.path.dirname(os.path.realpath(__file__)) 
+2

どのような効果ctがあれば、Shell = Trueを引数に追加するとcwdも設定されますか? –

+2

@T。 Stone:スタンドアロンの実行可能ファイルの場合、exeがシェルの環境変数の一部に依存しない限り、何も変更してはいけません。しかし、 'shell = False'では、' cd'のようなシェルを使うことはできません:つまり、シェルで両方の方法でLinuxでこれを試してください: 'subprocess.Popen(" cd/tmp; pwd ")' –

+1

ありがとうたくさん!それは魅力のように動作します! – icn

関連する問題